Python 3.8+中能否创建命名联合类型?
为类型联合定义别名的方法
Python的typing模块完全支持为长类型联合定义别名,不同版本有不同的实现方式:
Python 3.10+(推荐)
从Python 3.10开始,你可以直接使用|运算符替代Union,同时可以通过类型别名来命名你的联合类型,有两种写法:
方式1:直接赋值定义别名
# 3.10+可直接用|运算符,无需导入Union MyUnion = Foo | Bar | Fizz | Buzz | Splat | Bang | Woo | Wizz def foo(self) -> MyUnion: # 函数实现 ...
方式2:使用TypeAlias显式标注(更清晰)
如果想明确标记这是一个类型别名,避免和普通变量混淆,可以用typing.TypeAlias:
from typing import TypeAlias MyUnion: TypeAlias = Foo | Bar | Fizz | Buzz | Splat | Bang | Woo | Wizz def foo(self) -> MyUnion: ...
Python 3.9及以下
在更早的版本中,需要借助Union来定义,同样可以直接赋值作为别名:
from typing import Union MyUnion = Union[Foo, Bar, Fizz, Buzz, Splat, Bang, Woo, Wizz] def foo(self) -> MyUnion: ...
这些别名可以在任何需要使用原联合类型的地方复用,包括函数返回值、参数类型、变量注解等,类型检查工具(如mypy、pyright)都能正确识别。
内容的提问来源于stack exchange,提问作者Sam Johnson
相关产品推荐
相关产品推荐

