Python数据类中用|替代Union类型提示时出现错误
问题分析与解决方法
你遇到的错误和数据类无关,核心问题是误用了numpy的函数作为类型提示:
np.array是numpy中创建数组的内置函数,并不是表示数组实例的类型对象。- 当你用
|语法时,Python会尝试对np.array(函数)和list[tuple](类型别名)执行|运算,这两种类型不支持该操作,所以抛出TypeError。 - 之前用
Union的写法其实也不规范,只是因为Union在运行时不会严格校验类型对象的合法性,所以没触发报错,但本质上是错误的类型提示。
正确写法
numpy数组的标准类型提示是np.ndarray(数组实例的实际类型),替换后代码即可正常运行:
from dataclasses import dataclass import numpy as np @dataclass class Test: data: np.ndarray | list[tuple] if __name__ == "__main__": test = Test(data=np.array([2, 1])) test2 = Test(data=[(1, 2), (1, 2)])
如果用回Union语法,正确的写法也应该是:
from dataclasses import dataclass from typing import Union import numpy as np @dataclass class Test: data: Union[np.ndarray, list[tuple]]
内容的提问来源于stack exchange,提问作者sebwr
相关产品推荐
相关产品推荐

