PyCharm:为什么在这种情况下签名不匹配?

考虑以下代码示例:


class BaseExtractor(object, metaclass=abc.ABCMeta):


    @abc.abstractmethod

    def extract(self, interval, *args, **kwargs):

        raise NotImplementedError


class ChildExtractor(BaseExtractor):


    def extract(self, interval, variants, anchor, fixed_len=True, **kwargs):

        pass

为什么 PyCharm 告诉我ChildExtractor.extract()不匹配BaseExtractor.extract()?


我开始认为我只是犯了一些非常愚蠢的错误......


编辑:


class ChildExtractor(BaseExtractor):


    def extract(self, interval, variants, anchor, *args, fixed_len=True, **kwargs):

        pass

这会导致相同的错误。


SMILET
浏览 182回答 1
1回答

慕哥6287543

考虑以下用法BaseExtractor:def extractor_usage(extractor: BaseExtractor):    extractor.extract(interval=10)它正确使用BaseExtractor接口,但传递ChildExtractor给此方法会导致TypeError.这个问题可以通过 makevariants和anchoroptional 来解决,例如:class ChildExtractor(BaseExtractor):    def extract(self, interval, variants=None, anchor=None, *args, fixed_len=True, **kwargs):        passextractor_usage(ChildExtractor())  # No TypeError here
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python