从 Python 中的复合类型中获取主类型

Alb*_*o B 1 python python-typing

假设我的类型定义为:

data_type1 = list[str]
data_type2 = set[int]
Run Code Online (Sandbox Code Playgroud)

等等,如何通过分析这两种数据类型来获取主要类型(例如列表或集合)?

我试过:

issubclass(data_type1, list)
issubclass(data_type2, set)
Run Code Online (Sandbox Code Playgroud)

但它返回 False

任何想法?

Abd*_*P M 5

您可以使用__origin__属性。该属性指向非参数化泛型类

>>> data_type1 = list[str]
>>> data_type1.__origin__
<class 'list'>
>>> data_type2 = set[int]
>>> data_type2.__origin__
<class 'set'>
>>> data_type2.__origin__ == set
True
Run Code Online (Sandbox Code Playgroud)

或使用moduleget_origin中的 APItyping

>>> data_type1 = list[str]
>>> 
>>> from typing import get_origin
>>> get_origin(data_type1)
<class 'list'>
>>> get_origin(data_type1) == list
True
Run Code Online (Sandbox Code Playgroud)