如何从实例化的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
相关产品推荐
相关产品推荐

