【问题标题】: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))
      

      足够了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-05
        • 2020-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多