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

继承Generic的子类使用时MyPy未报预期类型错误是什么原因?

问题原因

mypy默认仅对带有类型注解的函数执行严格类型检查,你示例中的main函数没有添加任何类型标注,会被mypy归类为动态类型区域,直接跳过类型检查,所以不会抛出你预期的类型不匹配错误。

解决方案

方案1:仅针对当前函数开启检查

给main函数加上返回值类型注解即可:

def main() -> None:
    my_var = MyClassInt(value='six')
    my_var.set_val("str")

修改后重新运行mypy,就会输出两处预期错误:

error: Argument "value" to "MyClassInt" has incompatible type "str"; expected "int"  [arg-type]
error: Argument 1 to "set_val" of "MyClass" has incompatible type "str"; expected "int"  [arg-type]

方案2:全局开启严格类型检查

如果希望mypy对所有代码执行检查,不需要逐函数加注解触发,可以运行时添加--strict参数:

mypy your_file_name.py --strict

也可以在项目根目录的mypy配置文件(mypy.ini、pyproject.toml等)中添加如下配置,实现全局严格检查:

[mypy]
disallow_untyped_defs = True

补充说明

PyCharm的内置类型检查规则默认是全量扫描所有代码,不受函数是否有类型注解的限制,所以会提前识别出这两处类型不匹配的问题,和mypy的默认规则不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:39:00