如何从Python中的类的属性名称中获取值?

9fkzdhlc  于 2023-08-08  发布在  Python
关注(0)|答案(1)|浏览(107)

我想从一个类的属性中获取所有的值,所以如果我的程序出错了,我可以查看json文件,查看类的值,然后发现问题。

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}]

9o685dep

9o685dep1#

你有三个错误。
1.正如Pranav Hosangadi指出的,getattr(b, attribute_name)有一个错别字。应该是getattr(e, attribute_name)
1.你不必要地调用attribute.valueattribute就足够了。
1.仅使用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 [{'name': 'x', 'value': 1}, {'name': 'y', 'value': 2}]

字符串

相关问题