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

Can I get all attributes that were defined in the __init__ method of a class?

假设我有一个这样的class:

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

我怎样才能得到这样的字典?

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

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

您可以通过查看 __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:
    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'}"

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

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

x = A()

print(x.__dict__)

这应该给你:

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

dict 属性是一个 dunder 属性,但它是这个 IMO 的最优雅的解决方案。您想避免使用这种方法有什么具体原因吗?如果没有,为了简单起见,我推荐它。