我可以获取在 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 的最优雅的解决方案。您想避免使用这种方法有什么具体原因吗?如果没有,为了简单起见,我推荐它。
假设我有一个这样的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 的最优雅的解决方案。您想避免使用这种方法有什么具体原因吗?如果没有,为了简单起见,我推荐它。