在运行时访问变量的 Python 3 个类型注释

Accessing Python 3 type annotations for variables at runtime

我想知道是否可以在运行时访问变量的类型注释,就像您可以使用 inspect.getmembers() 中的 __annotations__ 条目访问方法和函数一样。

> a:Optional[str]=None
> type(a)
<class 'NoneType'>

> a:str=None
> type(a)
<class 'NoneType'>

谢谢。

locals()globals() 跟踪 __annotations__ 键中变量的注释。

>>> from typing import *
>>> a: Optional[int] = None
>>> locals()['__annotations__']
{'a': typing.Union[int, NoneType]}
>>> locals()['__annotations__']['a']
typing.Union[int, NoneType]
>>> 
>>> foo = 0
>>> bar: foo
>>> locals()['__annotations__']['bar']
0
>>>
>>> baz: List[str]
>>> locals()['__annotations__']['baz']
typing.List[str]

获得灵感,这里有一个供 REPL 使用的辅助函数:

>>> def get_annot(var: str) -> str:
        if var in globals():
            return globals()["__annotations__"].get(var, "Un-annotated Variable")
        else:
            return "Undefined variable"

>>> var: int = 5
>>> get_annot(var)
int

在全局字典中查找变量和 returns 注释(如果它同时定义 注释。