当我以“正常方式”创建和使用数据类时,我可以毫无问题地运行并键入检查我的代码 mypy。 例如,这段代码运行得很好:
@dataclass
class Person2:
name : str
age : int
height : float
def f2(p : Person2):
print(p)
但是如果我尝试使用 make_dataclass 创建数据类,则会遇到问题。 例如:
types_list = [('name', str), ('age', int), ('height', float)]
Person = make_dataclass('Person', types_list)
a=Person(name="n",age=2, height=4.3)
def f(p : Person):
print(p)
q.py:10:错误:变量“q.Person”作为类型无效[有效类型]
为什么会出现这个问题以及可以解决吗
有关
Person
的信息可以从静态构造(如 class
语句)中收集,但不能从特定的 call 到函数中收集,对于该函数,我们只知道其自身参数的名称和类型,而不是 值这些论点。
从值(而不仅仅是其他类型)构造的类型称为依赖类型,Python 的类型检查当前不支持依赖类型。