Python中抽象方法的静态类型检查

Python中抽象方法的静态类型检查,python,pycharm,Python,Pycharm,如何确保实现抽象方法的方法符合python静态类型检查。如果所实现的方法的返回类型不正确,pycharm中是否有方法获取错误 class Dog: @abc.abstractmethod def bark(self) -> str: raise NotImplementedError("A dog must bark") class Chihuahua(Dog): def bark(self): return 123 因此,对于上

如何确保实现抽象方法的方法符合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
是完全有效的代码(尽管不一定是好的做法,因为它违反了规则)。使用
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