假設我們得到了一個通用類定義,例如:
from dataclasses import dataclass
from typing import TypeVar, Generic, List
T1 = TypeVar('T1')
T2 = TypeVar('T2')
@dataclass
class MyGenericClass(Generic[T1, T2]):
val: T1
results: List[T2]
@dataclass
class BaseClass:
my_str: str
@dataclass
class MyTestClass(BaseClass, MyGenericClass[str, int]):
...
確定MyTestClass
是泛型類(即與常規數據類相反)的最佳方法是什么?
此外,在這種情況下,typing
模塊是否提供了將泛型類型(TypeVar)解析為具體類型關系的簡單方法?
例如,給定上面的results: List[T2]
,我想理解MyTestClass
上下文中的T2
將解析為int
類型。
確定類是否為泛型
當前,如果運行set(vars(MyTestClass)) - set(vars(BaseClass))
,將得到以下結果:
{'__parameters__', '__orig_bases__'}
然而,我想知道typing
是否提供了一種簡單的方法來確定類是泛型還是來自泛型類的sub-classes,例如typing.Dict
。
所以我感興趣的是is_cls_generic()
的效果。
解析TypeVar
類型
目前,當我調用typing.get_type_hints(MyTestClass)
時,我得到以下結果:
{'val': ~T1, 'results': typing.List[~T2], 'my_str': <class 'str'>}
我想知道typing
模塊是否提供了一種簡單的方法來解析這些TypeVar
變量,因此期望的結果是:
{'val': str, 'results': typing.List[int], 'my_str': str}
Credits
Introspection helpers
mypy
沒有提供您需要的功能,但手工實現并不太困難。Usage