我可以获取在类的_init__方法中定义的所有属性吗?

2024-04-19 06:40:13 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个这样的类:

class A:
    def __init__(self):
        self.a = "a"
        self.b = "b"

我怎样才能得到这样一本字典

{"a": "a", "b": "b"}

我读了this question and answers,但这些答案中的字典也总是包含一些“dunder”属性,这是我在A.__init__中从未定义过的。我必须使用链接问题中的一个解决方案并过滤掉dunder属性,还是有更聪明的方法


Tags: and答案self字典属性定义init链接
3条回答

您可以通过查看__dict__属性或使用vars函数来执行此操作,如下所示:

class A:
    def __init__(self):
        self.a = "a"
        self.b = "b"

print(A().__dict__)  # prints {'a': 'a', 'b': 'b'}
print(vars(A()))     # also prints {'a': 'a', 'b': 'b'}

也许我不理解你的问题,但获得你所描述的属性字典的最简单方法如下:

class A:
    def __init__(self):
        self.a = "A"
        self.b = "B"

x = A()

print(x.__dict__)

这应该给你:

{a: "A", b: "B"}

dict属性是dunder属性,但对于这个IMO来说,它是最优雅的解决方案。是否有特定的原因要避免使用此方法?如果不是,为了简单起见,我推荐它

class A:
    foo = 'bar'

    def __init__(self):
        self.a = "a"
        self.b = "b"

a = A()
print(vars(a)) # prints "{'a': 'a', 'b': 'b'}"
print({k: v for k, v in vars(A).items() if not k.startswith('__')}) # prints "{'foo': 'bar'}"

相关问题 更多 >