我有一个泛型基类,我希望能够检查它提供的类型。我的方法是使用typing.get_args
,其工作原理如下:
from typing import Generic, Tuple, TypeVarTuple, get_args
T = TypeVarTuple("T")
class Base(Generic[*T]):
values: Tuple[*T]
Example = Base[int, str]
print(get_args(Example)) # (<class 'int'>, <class 'str'>)
但是当我继承类的时候,我得到了一个空的参数列表,如下所示:
class Example2(Base[int, str]):
pass
print(get_args(Example2)) # ()
我真正需要的是知道values
属性应该是什么类型,我可能有错误的方法,但是我也尝试过使用typing.get_type_hints
,它似乎只是返回Tuple[*T]
作为类型。
那么我怎样才能得到类型化参数呢?
编辑:我需要知道 class 的类型,而不是对象。
2条答案
按热度按时间8qgya5xd1#
将
get_args
与__orig_bases__
一起使用:为方便起见,您可以将泛型类型参数存储在
__init_subclass__
挂钩中:q0qdq0h22#
您还可以使用python函数
来检索类的文档。这不会直接返回所有可能的参数,但所有可能的参数都应该在返回中列出。
这将为您提供可用的参数,除非它要求只检索参数以插入其他内容,在这种情况下,这可能不是您要查找的内容。