如何在运行时检查TypeVar的类型

时间:2020-03-08 04:09:59

标签: python generics static-typing

我有一个通用类F5
我的问题是,是否有任何函数返回作为通用类型传递给类Graph[Generic[T], object]

的类型
Graph

1 个答案:

答案 0 :(得分:2)

这是从Python 3.6+开始工作的一种方法(已在3.6、3.7和3.8中进行了测试):

from typing import TypeVar, Generic

T = TypeVar('T')

class Graph(Generic[T], object):
    def get_generic_type(self):
        print(self.__orig_class__.__args__[0])


if __name__=='__main__':
    g_int = Graph[int]()
    g_str = Graph[str]()

    g_int.get_generic_type()
    g_str.get_generic_type()

输出:

<class 'int'>
<class 'str'>

如果您想获取__new____init__内的类型有些棘手,请参见以下帖子以了解更多信息:Generic[T] base class - how to get type of T from within instance?

修改

库pytypes似乎提供了一种即使从init即可获取 orig_class 的方法,请在此处查看方法get_orig_classhttps://github.com/Stewori/pytypes/blob/master/pytypes/type_util.py