如何使用静态类型检查使用 make_dataclass 创建的数据类

问题描述 投票:0回答:1

当我以“正常方式”创建和使用数据类时,我可以毫无问题地运行并键入检查我的代码 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”作为类型无效[有效类型]

为什么会出现这个问题以及可以解决吗

python python-typing mypy
1个回答
0
投票

有关

Person
的信息可以从静态构造(如
class
语句)中收集,但不能从特定的 call 到函数中收集,对于该函数,我们只知道其自身参数的名称和类型,而不是 这些论点。

从值(而不仅仅是其他类型)构造的类型称为依赖类型,Python 的类型检查当前不支持依赖类型。

© www.soinside.com 2019 - 2024. All rights reserved.