Как мне убедиться, что метод, реализующий абстрактный метод, придерживается статических проверок типов Python. Есть ли способ в Pycharm, чтобы получить ошибку, если тип возвращаемого значения является неправильным для реализованного метода?
class Dog:
@abc.abstractmethod
def bark(self) -> str:
raise NotImplementedError("A dog must bark")
class Chihuahua(Dog):
def bark(self):
return 123
Так что для приведенного выше кода я хотел бы получить какой-то намек, что с моим чихуахуа что-то не так
Нет, не существует (простого) способа обеспечить это.
И на самом деле в вашем Chihuahua
нет ничего плохого, так как типизация Python duck позволяет вам переопределить сигнатуру (как аргументы, так и типы) 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