dataclass
中的成员变量:
>>> from typing import TypeAlias
>>> Number: TypeAlias = int | float
>>> n, x = 1, 2.5
>>> isinstance(n, Number)
True
>>> isinstance(x, Number)
True
根据docs,此语法已被弃用:
自版本 3.12 起已弃用:
已弃用,取而代之的是TypeAlias
语句,该语句创建type
的实例并本机支持前向引用。请注意,虽然TypeAliasType
和TypeAlias
具有相似的用途并且具有相似的名称,但它们是不同的,并且后者不是前者的类型。目前尚未计划删除TypeAliasType
,但鼓励用户迁移到TypeAlias
语句。type
我尝试使用新语法,但出现错误:
>>> type Number = int | float
>>> isinstance(n, Number)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union
我该怎么办?
如果您需要在新语法中使用
isinstance
,则需要通过 __value__
属性显式访问类型别名的值(并强制其求值):
isinstance(n, Number.__value__)
当然,只有当别名的值与
isinstance
兼容时,这才有效,这排除了 NewType
或泛型之类的东西,或者......您想要为其创建类型别名的大多数东西,但是int | float
应该没问题。