Нет, нет (простого) способа обеспечить это.
И на самом деле в вашем 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