Hoe*_*eze 3 python pycharm python-3.x
考虑以下代码示例:
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
Run Code Online (Sandbox Code Playgroud)
为什么 PyCharm 告诉我ChildExtractor.extract()不匹配BaseExtractor.extract()?
我开始认为我只是犯了一些非常愚蠢的错误......
编辑:
class ChildExtractor(BaseExtractor):
def extract(self, interval, variants, anchor, *args, fixed_len=True, **kwargs):
pass
Run Code Online (Sandbox Code Playgroud)
这会导致相同的错误。
考虑以下用法BaseExtractor:
def extractor_usage(extractor: BaseExtractor):
extractor.extract(interval=10)
Run Code Online (Sandbox Code Playgroud)
它正确使用BaseExtractor接口,但传递ChildExtractor给此方法会导致TypeError.
variants该问题可以通过 make和可选来解决anchor,例如:
class ChildExtractor(BaseExtractor):
def extract(self, interval, variants=None, anchor=None, *args, fixed_len=True, **kwargs):
pass
extractor_usage(ChildExtractor()) # No TypeError here
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1837 次 |
| 最近记录: |