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

如何从实例化的types.GenericAlias中获取其下标化的泛型类?

从types.GenericAlias实例中提取泛型类的Python风格方法

规范解决方案

在Python 3.10及以上版本中,types.GenericAlias实例自带__origin__属性,直接通过它就能获取对应的原始泛型类,这是官方支持的标准用法:

import types

generic_alias = list[str]
origin_class = generic_alias.__origin__
print(origin_class)  # 输出: <class 'list'>

# 验证类型的话直接比较即可
def is_list(type_: types.GenericAlias) -> bool:
    return type_.__origin__ is list

为什么不推荐字符串判断

你之前用字符串前缀判断的方法属于非规范的“黑魔法”:

  • 类型的字符串表示可能随Python版本、实现细节变化,稳定性差
  • 无法区分同名的自定义类和内置类(比如存在自定义list类时,判断会出错)

低版本兼容方案(Python 3.9及以下)

如果需要兼容更早的Python版本,可以使用typing.get_origin函数:

from typing import get_origin

generic_alias = list[str]
origin_class = get_origin(generic_alias)
print(origin_class)  # 输出: <class 'list'>

内容的提问来源于stack exchange,提问作者Angelo van Meurs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:49:54