在3.10之前,我使用
Union
来创建联合参数注释:
from typing import Union
class Vector:
def __mul__(self, other: Union["Vector", float]):
pass
现在,当我使用新的 union 速记语法时:
class Vector:
def __mul__(self, other: "Vector" | float):
pass
我收到错误:
TypeError:| 不支持的操作数类型:“str”和“type”
不支持吗?
它被用作类型提示这一事实并不重要;它只是被用作类型提示。从根本上来说,表达式
"Vector" | float
是一个类型错误,因为字符串不支持 |
运算符,它们不实现 __or__
。要通过此考试,您有三个选择:
推迟评估(参见PEP 563):
from __future__ import annotations
class Vector:
def __mul__(self, other: Vector | float): ...
使整个类型成为字符串(实际上与延迟评估相同):
class Vector:
def __mul__(self, other: "Vector | float"): ...
继续使用
Union
:
from typing import Union
class Vector:
def __mul__(self, other: Union["Vector", float]): ...
您可以看到关于 这个 bug 的进一步讨论,但尚未有解决方案。