在运行时访问变量的 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 注释(如果它同时定义 和 注释。
我想知道是否可以在运行时访问变量的类型注释,就像您可以使用 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]
从
>>> 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 注释(如果它同时定义 和 注释。