如何确保实现抽象方法的方法遵循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
是完全有效的代码(尽管不一定是好的实践,因为它违反了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