如何从 TypeVar 获取类型?

How to get a type from a TypeVar?

假设我有:

T = TypeVar('T', bound='Client')

现在,我想要一个获取类型 T 和 returns 'Client' 的函数,或者更好的是 class 客户端。

如何在 Python 3.9 中获得它?

谢谢。

您可以通过 typing_inspect 包中的 typing_inspect.get_bound 来完成此操作。它为类型注释的运行时检查提供跨版本支持:

>>> class Foo: pass

>>> T = TypeVar("T", bound=Foo)
>>> typing_inspect.get_bound(T)
__main__.Foo

>>> T = TypeVar("T", bound="Foo")
>>> typing_inspect.get_bound(T)
ForwardRef('Foo')

bound设置为字符串时,返回值为“前向引用”。我认为目前没有 public API 可以将其评估为具体的 class。有一个私有 API 可以像这样使用:

>>> ref = typing_inspect.get_bound(T)
>>> ref._evaluate(globals(), globals(), set())
__main__.Foo