如何在Python中枚举对象的属性?

IC#我们通过反思来完成。 在Javascript中,它很简单:

for(var propertyName in objectName) var currentPropertyValue = objectName[propertyName]; 

如何在Python中做到这一点?

 for property, value in vars(theObject).iteritems(): print property, ": ", value 

请注意,在一些极less数情况下,有一个__slots__属性,这样的类通常没有__dict__

请参阅inspect.getmembers(object[, predicate])

返回按名称sorting的(名称,值)对列表中的所有对象成员。 如果提供了可选的谓词参数,则只包含谓词返回真值的成员。

 >>> [name for name,thing in inspect.getmembers([])] ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__','__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] >>> 

dir()是简单的方法。 看这里:

Python自省指南

对象的__dict__属性是其所有其他定义属性的字典。 请注意,Python类可以重写getattr,并使其看起来像属性,但不在__dict__ 。 还有内build函数vars()dir() ,它们在微妙的方面是不同的。 __slots__可以替代__dict__在一些不寻常的类。

Python中的对象很复杂。 __dict__是开始进行reflection式编程的好地方。 如果您在交互式shell中窃听, dir()是开始的地方。

georg scholly短版

 print vars(theObject) 

如果你正在寻找所有属性的反思,上面的答案是伟大的。

如果你只是想获得一个对象的键,使用

my_dict.keys()

 my_dict = {'abc': {}, 'def': 12, 'ghi': 'string' } my_dict.keys() > ['abc', 'def', 'ghi']