【问题标题】:How to inspect all ClassVar inside class?如何检查课堂内的所有 ClassVar?
【发布时间】:2021-09-03 14:23:31
【问题描述】:
我有一个如下的 Python 类:
from typing import ClassVar
class Foo:
bar: ClassVar[int] = 1
def __init__(self):
self.spam: int = 2
如何检查此类 Foo 以获取 ClassVars 及其值?
我正在寻找类似 @987654324@ 的东西,并且需要它来支持 Python 3.8+。
【问题讨论】:
标签:
python
python-typing
class-variables
【解决方案1】:
您可以通过检查类的__annotations__ 字典来做到这一点。
from typing import ClassVar
class Foo:
bar: ClassVar[int] = 1
def __init__(self):
self.spam: int = 2
for attr, cls in Foo.__annotations__.items():
print(f'{attr=}, {cls=}, value={getattr(Foo, attr)}')
输出:
attr='bar', cls=typing.ClassVar[int], value=1
【解决方案2】:
在这里打字似乎完全无关紧要。在任何情况下,要获取对象的属性,您总是可以尝试检查对象的命名空间。对于类对象,
vars(Foo)
会工作的。但是,请注意,这将返回字面量命名空间,因此如果要独立于类修改此字典,则需要创建一个副本。在这种情况下,一个简单的浅拷贝:
dict(vars(Foo))
足够了。