列出对象属性及其值的编程方式?

时间:2014-11-04 19:33:48

标签: python object

我仍然相对较新的Python,所以请随时告诉我是否有一些我缺失的基本内容。

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

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()过程而无需每次都手动编写它?

编辑: 这里有一个类似的问题:List attributes of an object 但我正在寻找对象属性中的VALUES以及它们的列表。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

正如wim所说,您可以对vars属性的任何对象使用__dict__。但是,如果您正在处理没有的对象,则可以使用dir。请注意,这会返回与其关联的每个方法和字段,甚至包括__eq____ne__

如果输入:

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

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

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', <bound method YourMom.show of <__main__.YourMom object at 0x02DC1B50>>)]

a可以是你想要的任何类型,老实说 - 把它变成一个只接受一个对象并返回一个列表的方法真的很容易。