You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类型注解:如何从容器泛型中提取内部实际类型?

实现代码

所有参数化后的泛型类型都会把传入的类型参数按顺序存储在__args__元组属性中,直接读取该属性即可提取内部类型,实现代码如下:

from typing import Any, get_origin

def foo(generic_type: Any) -> Any:
    # 校验是否为合法的参数化泛型
    if get_origin(generic_type) is None:
        raise TypeError(f"输入 {generic_type} 不是参数化的泛型类型")
    # 返回第一个泛型参数
    return generic_type.__args__[0]

验证测试

用你给出的示例测试,输出符合预期:

from typing import List
a = List[int]
print(foo(a) == int) # 输出 True

补充说明

  • get_origin是Python 3.8+ typing模块内置的工具函数,如果你需要兼容更早版本,可以替换为直接判断__args__属性的存在性:
def foo(generic_type: Any) -> Any:
    if not hasattr(generic_type, "__args__") or len(generic_type.__args__) == 0:
        raise TypeError(f"输入 {generic_type} 不是参数化的泛型类型")
    return generic_type.__args__[0]
  • 该实现也支持其他泛型的参数提取,比如foo(Dict[str, int])会返回str,需要提取第二个参数的话取__args__[1]即可。

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 18:12:02