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

当T绑定类含可选参数时,Type[T]→T类方法为何在MyPy中报错?

为什么MyPy 0.590会报“Unsupported type Type["T"]”错误?

这个问题其实是MyPy旧版本的类型系统局限性导致的——你用的MyPy 0.590是2018年的老版本,当时它还没完全支持带bound约束的TypeVar和Type[]结合使用的语法。

你的代码里T是绑定到A的TypeVar,在类方法fn里用Type[T]注解cls参数,这种写法在这个老旧版本里被判定为不支持的类型结构,所以才触发了错误提示。

解决办法

针对这个旧版本,有两种可行的处理方式:

1. 调整类型注解写法(适配旧版本)

把cls的注解改成Type[A],然后在返回值处用cast明确类型,绕过旧版本的检查限制:

from typing import Type, TypeVar, cast
AnyT = TypeVar('AnyT')
T = TypeVar('T', bound='A')

class A:
    def __init__(self, arg: AnyT = None) -> None:
        pass

    @classmethod
    def fn(cls: Type[A]) -> T:
        return cast(T, cls())

2. 升级MyPy到新版本(彻底解决)

这个问题在MyPy 0.600及以后的版本中已经被修复了,新版本完全支持Type[T]结合带bound的TypeVar的写法。如果你的环境允许,直接升级到最新稳定版的MyPy,你的原始代码就能正常通过类型检查,不需要做任何修改。

另外你提到的典型场景:如果__init__是用来复制另一个实例(比如__init__(self, other: T)),在新版本MyPy中,你原本的写法完全可以正常工作,不用额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:42:38