You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么mypy未对实例化含未实现纯虚方法的类发出警告?

mypy未触发告警的原因
  • 你所定义的Father类并不是Python规范中的抽象类:Python要实现带纯虚方法的抽象类,必须同时满足继承abc.ABC基类、为抽象方法添加@abstractmethod装饰器两个要求。你当前代码里的run只是普通的空实现方法,并非强制要求子类重写的抽象方法,Son类不重写该方法不属于语法错误。
  • mypy的默认配置规则不校验普通子类是否覆盖父类的普通方法:只有当你按规范定义抽象类之后,mypy才会在你实例化未实现全部抽象方法的子类时抛出错误。
  • 宽松配置下的类型校验遗漏:你当前run方法声明返回值为int,但实际空实现pass等价于返回None,默认未开启严格模式的mypy也不会对这类返回值不匹配的问题抛出告警。

如果需要mypy正确检测到该问题,可按标准抽象类规则改造代码,示例如下:

from abc import ABC, abstractmethod

class Father(ABC):
    def __init__(self):
        self.i = 800
    @abstractmethod
    def run(self, s: str) -> int:
        pass

class Son(Father):
    def walk(self, i: int) -> int:
        return self.i + i + 800

# 此时实例化Son时mypy会抛出错误:Cannot instantiate abstract class "Son" with abstract attribute "run"
s = Son()

内容的提问来源于stack exchange,提问作者OrenIshShalom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:36:02