如何从python中的class的属性名称中获取值?
How to get the value from a attribute name of a class in python?
我想从 class 的属性中获取所有值,所以如果我的程序出现错误,我可以查看 json 文件并查看 [=18] 中的值=]es然后看问题。
class Example:
def __init__(self, x, y):
self.x = x
self.y = y
e = Example(1, 2)
data = []
for attribute_name in dir(e):
attribute = getattr(b, attribute_name)
if not callable(attribute):
data.append({"name":attribute_name, "value":attribute.value})
print(data)
我想要的:
[{"name":"x", "value":1}, {"name":"y", "value":2}]
你有 3 个错误。
正如 Pranav Hosangadi 所指出的,getattr(b, attribute_name)
有错字。应该是 getattr(e, attribute_name)
.
您不必要地调用 attribute.value
。只需 attribute
就足够了。
仅使用 if not callable(attribute)
将输出 [{'name': '__module__', 'value': '__main__'}, {'value': 1, 'name': 'x'}, {'name': 'y', 'value': 2}]
。 __module__
不是您想要的,因此请另外检查属性名称中的 __
。
话虽如此,下面是完整的更正代码:
class Example:
def __init__(self, x, y):
self.x = x
self.y = y
e = Example(1, 2)
data = []
for attribute_name in dir(e):
attribute = getattr(e, attribute_name)
if not "__" in attribute_name and not callable(attribute):
data.append({"name":attribute_name, "value":attribute})
print(data)
# Prints [{'value': 1, 'name': 'x'}, {'value': 2, 'name': 'y'}]
我想从 class 的属性中获取所有值,所以如果我的程序出现错误,我可以查看 json 文件并查看 [=18] 中的值=]es然后看问题。
class Example:
def __init__(self, x, y):
self.x = x
self.y = y
e = Example(1, 2)
data = []
for attribute_name in dir(e):
attribute = getattr(b, attribute_name)
if not callable(attribute):
data.append({"name":attribute_name, "value":attribute.value})
print(data)
我想要的:
[{"name":"x", "value":1}, {"name":"y", "value":2}]
你有 3 个错误。
正如 Pranav Hosangadi 所指出的,
getattr(b, attribute_name)
有错字。应该是getattr(e, attribute_name)
.您不必要地调用
attribute.value
。只需attribute
就足够了。仅使用
if not callable(attribute)
将输出[{'name': '__module__', 'value': '__main__'}, {'value': 1, 'name': 'x'}, {'name': 'y', 'value': 2}]
。__module__
不是您想要的,因此请另外检查属性名称中的__
。
话虽如此,下面是完整的更正代码:
class Example:
def __init__(self, x, y):
self.x = x
self.y = y
e = Example(1, 2)
data = []
for attribute_name in dir(e):
attribute = getattr(e, attribute_name)
if not "__" in attribute_name and not callable(attribute):
data.append({"name":attribute_name, "value":attribute})
print(data)
# Prints [{'value': 1, 'name': 'x'}, {'value': 2, 'name': 'y'}]