首页 > 解决方案 > Python中抽象方法的静态类型检查

问题描述

如何确保实现抽象方法的方法遵守 python 静态类型检查。如果实现的方法的返回类型不正确,pycharm 中是否有办法获取错误?

class Dog:
    @abc.abstractmethod
    def bark(self) -> str:
        raise NotImplementedError("A dog must bark")

class Chihuahua(Dog):
    def bark(self):
        return 123

因此,对于上面的代码,我想得到某种提示,表明我的吉娃娃有问题

标签: pythonpycharm

解决方案


不,没有(简单的)方法可以强制执行此操作。

实际上,您没有任何问题,Chihuahua因为 Python 的鸭子类型允许您覆盖bark. 所以Chihuahua.bark返回 anint是完全有效的代码(尽管不一定是好的做法,因为它违反了 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

推荐阅读