如何在Python 3.9-3.10中创建带可变参数的typing.Annotated实例
在Python 3.9-3.10中处理Annotated的可变参数需求
一、创建带可变元数据的Annotated实例
Python 3.11支持Annotated[int, *a]的语法,但3.9-3.10不用搞循环嵌套,直接利用类型构造函数的参数展开就能实现,代码简洁直接:
from typing import Annotated a = [1, 2, 3] # 直接解包元数据列表创建Annotated实例 annotated_type = Annotated[int, *a]
这个写法和Python 3.11的Annotated[int, *a]效果完全一致。
二、提取原始类型和元数据并重建Annotated实例
Annotated类型自带两个可直接调用的公共属性,用来提取信息再重建非常方便:
__origin__:对应原始类型(比如示例里的int)__args__:包含原始类型+所有元数据的元组,第一个元素是原始类型,后续都是元数据
具体代码如下:
# 假设已有一个Annotated实例 existing_annotated = Annotated[int, 1, 2, 3] # 提取原始类型和元数据 raw_type = existing_annotated.__origin__ metadata = existing_annotated.__args__[1:] # 从第二个元素开始取元数据 # 重新创建Annotated实例 recreated_annotated = Annotated[raw_type, *metadata]
验证一下的话,print(recreated_annotated == existing_annotated)会输出True,说明重建成功。
注意事项
- 确保Python版本在3.9及以上,因为
Annotated是3.9才纳入标准库的 __origin__和__args__是PEP 484定义的泛型类型标准属性,属于稳定用法,不用担心兼容性问题
内容的提问来源于stack exchange,提问作者wRAR
相关产品推荐
相关产品推荐

