Проверка статического типа для абстрактного метода в Python - PullRequest
0 голосов
/ 08 января 2019

Как мне убедиться, что метод, реализующий абстрактный метод, придерживается статических проверок типов python. Есть ли в pycharm способ получить ошибку, если возвращаемый тип неверен для реализованного метода?

class Dog:
    @abc.abstractmethod
    def bark(self) -> str:
        raise NotImplementedError("A dog must bark")

class Chihuahua(Dog):
    def bark(self):
        return 123

Так что для приведенного выше кода я хотел бы получить какой-то намек, что с моим чихуахуа что-то не так

1 Ответ

0 голосов
/ 09 января 2019

Нет, нет (простого) способа обеспечить это.

И на самом деле в вашем Chihuahua нет ничего плохого, так как утка Python позволяет вам переопределить сигнатуру (как аргументы, так и типы) bark. Таким образом, Chihuahua.bark, возвращающий int, является полностью допустимым кодом (хотя это не обязательно хорошая практика, поскольку он нарушает LSP ). Использование модуля abc не меняет этого вообще, так как не применяет сигнатуры методов .

Для «принудительного применения» типа просто перенесите подсказку типа в новый метод, что делает его явным. Это также приводит к тому, что PyCharm показывает предупреждение.

import abc

class Dog:
    @abc.abstractmethod
    def bark(self) -> str:
        raise NotImplementedError("A dog must bark")

class Chihuahua(Dog):
    def bark(self) -> str:
        # PyCharm warns against the return type
        return 123
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...