如何从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 个错误。

  1. 正如 Pranav Hosangadi 所指出的,getattr(b, attribute_name) 有错字。应该是 getattr(e, attribute_name).

  2. 您不必要地调用 attribute.value。只需 attribute 就足够了。

  3. 仅使用 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'}]