Python如何从复合泛型类型提取主类型?issubclass返回False求解决方法
解决方法
当你定义list[str]、set[int]这类参数化泛型类型时,直接用issubclass判断会返回False,因为它们不是对应原始类的子类,而是泛型类型的实例化对象。要获取其主类型,可用以下两种方式:
使用标准库的
typing.get_origin()函数(推荐,兼容性更好)from typing import get_origin data_type1 = list[str] data_type2 = set[int] main_type1 = get_origin(data_type1) main_type2 = get_origin(data_type2) print(main_type1) # 输出 <class 'list'> print(main_type2) # 输出 <class 'set'> # 此时再用issubclass判断就会返回True print(issubclass(main_type1, list)) # True print(issubclass(main_type2, set)) # True直接访问
__origin__属性(CPython实现的属性,同样可用)data_type1 = list[str] data_type2 = set[int] print(data_type1.__origin__) # <class 'list'> print(data_type2.__origin__) # <class 'set'>
补充说明
list[str]本质是泛型类型list被参数化后的实例,它和原始的list类是不同的对象,所以直接用issubclass(data_type1, list)会返回False。而get_origin()或__origin__的作用就是提取出这个参数化泛型背后的原始主类型。
内容的提问来源于stack exchange,提问作者Alberto B
相关产品推荐
相关产品推荐

