我如何确保实现抽象方法的方法遵守python静态类型检查。如果执行的方法的返回类型不正确,pycharm中是否有办法获取错误?
class Dog:
@abc.abstractmethod
def bark(self) -> str:
raise NotImplementedError("A dog must bark")
class Chihuahua(Dog):
def bark(self):
return 123
因此对于上面的代码,我想得到某种提示,说我的吉娃娃狗出了毛病
答案 0 :(得分:3)
没有,没有(简单的)方法可以强制执行此操作。
实际上,您的Chihuahua
没有任何问题,因为Python的鸭子输入允许您覆盖bark
的签名(参数和类型)。因此,Chihuahua.bark
返回int
是完全有效的代码(尽管不一定是良好的做法,因为它违反了the LSP)。使用abc
模块不会完全更改为it doesn't enforce method signatures。
要“强制”类型,只需将类型提示携带到新方法中,即可使其变得显式。它还会导致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