关于python:列出对象属性及其值的编程方式?

Programmatic way to list object properties and their values?

我对python还是比较陌生的,所以请随时告诉我是否有一些基本的东西我遗漏了。

为了方便调试,我养成了为我创建的每个对象创建show()过程的习惯。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class YourMom:
    def __init__(self):
        self.name =""
        self.age =""
        self.children = []
    #End init()

    def show(self):
        print"Name is '%s'" % (self.name)
        print"Age is '%s'" % (self.age)
        for i in self.children:
            print"  Children: '%s'" % (i)
     #End show()
#End YourMom class

所以我的问题很简单:是否有一种程序化的方法来执行show()过程,而不需要每次都手动编写它?

编辑:这里有一个类似的问题:列出对象的属性但我在查找对象属性中的值以及它们的列表。


正如wim所说,您可以在具有__dict__属性的任何对象上使用vars。但是,如果您处理的对象不是这样,则可以使用dir。注意,这将返回与之关联的每个方法和字段,即使是像__eq____ne__这样的方法和字段。

如果键入:

1
dir(YourMom())

在解释器中,这是结果:

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'children', 'name', 'show']

如果您想做比显示所有内容更复杂的事情,您可能需要签出inspect。

例如,如果只想显示与任何其他对象不同的对象属性:

1
2
3
4
5
6
7
import inspect

a = YourMom()
# type is irrelevant below. comma after 'object' is critical,
# because the argument needs to be a tuple
plain_old_object = dir(type('plain', (object,), {}))
interesting_items = [item for item in inspect.getmembers(a) if item[0] not in plain_old_object]

这种回报:

[('age', ''), ('children', []), ('name', ''), ('show', >)]

诚实地说,a可以是您想要的任何类型——将其转换为只接受对象并返回列表的方法非常容易。


是的,它是一个名为vars的python内置函数。