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

继承cached_property后mypy类型检查结果异常的原因咨询

为什么自定义cached_property子类会绕过mypy类型检查?

这是因为mypy对标准库functools.cached_property有专门的类型处理逻辑,而你写的result_property子类没正确继承这种类型支持,导致mypy没法识别属性的实际类型,直接跳过了检查。

具体原因

  • 标准库的cached_property在mypy的官方类型定义(typeshed)里是泛型类型,能精准关联被装饰方法的返回类型。用它装饰返回int的方法时,mypy能明确知道foo.prop是int类型,自然会检测到和func要求的str不匹配。
  • 你自定义的result_property只是单纯继承了cached_property,但mypy不会自动给子类继承泛型参数的类型信息。这时候mypy会把foo.prop当成Any类型——Any可以和任意类型兼容,所以不会报错。

修复方法

给自定义子类加上泛型类型注解,让它正确继承cached_property的类型信息:

from functools import cached_property
from typing import TypeVar, Generic

T = TypeVar('T')

class result_property(cached_property[T], Generic[T]):
    pass

修改后再跑mypy,就会和第一个场景一样,触发int与str类型不兼容的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:24:54