如何在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']