PyCharm: почему в этом случае подпись не совпадает? - PullRequest
0 голосов
/ 29 января 2020

Рассмотрим следующий пример кода:

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

Это приводит к той же ошибке.

1 Ответ

1 голос
/ 30 января 2020

Рассмотрим следующее использование 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...