如何确保实现抽象方法的方法遵循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

08-19 11:35