泛型类中用TypeVar定义内部数据类时的MyPy报错问题
解决MyPy报错:Type variable "xxx._T" is unbound
问题核心是内部数据类_dataclass_helper未关联外部泛型类Base的类型变量_T——泛型类的内部类不会自动继承外部类的泛型参数,必须显式将内部类声明为泛型类。
修改后的代码如下:
from typing import Generic, TypeVar from dataclasses import dataclass _T = TypeVar("_T") class Base(Generic[_T]): @dataclass class _dataclass_helper(Generic[_T]): # 显式将内部类声明为泛型 value: _T string: str def __init__(self): pass # 使用 _dataclass_helper 的示例 def create_helper(self, val: _T, s: str) -> _dataclass_helper: return self._dataclass_helper(val, s)
关键修改说明
- 给
_dataclass_helper添加Generic[_T]继承,让它成为泛型类,从而绑定外部定义的_T类型变量。 - 这样MyPy就能识别
value字段的类型来自Base类的泛型参数,不会再报“unbound”错误。
如果之前尝试过将内部类设为泛型但未解决,可能是没正确关联同一个_T,或是在使用_dataclass_helper时未通过实例(如self._dataclass_helper)获取绑定了具体类型的内部类。
内容的提问来源于stack exchange,提问作者Tal Omer
相关产品推荐
相关产品推荐

