考虑以下代码示例:
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
这将导致相同的错误。
考虑以下用法BaseExtractor
:
def extractor_usage(extractor: BaseExtractor):
extractor.extract(interval=10)
它正确使用BaseExtractor
接口,但传递ChildExtractor
给此方法将导致TypeError
。
该问题可以通过制作variants
和anchor
可选来解决,例如:
class ChildExtractor(BaseExtractor):
def extract(self, interval, variants=None, anchor=None, *args, fixed_len=True, **kwargs):
pass
extractor_usage(ChildExtractor()) # No TypeError here
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句