如何在Python枚举一个对象的属性?(How to enumerate an object'

2019-06-18 06:15发布

IC#我们做到这一点通过反射。 在Javascript中是简单的:

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

如何做到这一点在Python?

Answer 1:

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

要知道,在某些罕见的情况下有一个__slots__属性,这些类往往没有__dict__



Answer 2:

inspect.getmembers(object[, predicate])

返回一个对象的所有成员的名称排序(名称,值)对的列表。 如果可选的谓词提供参数,仅针对谓词返回一个真值构件都包括在内。

>>> [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']
>>> 


Answer 3:

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

引导Python的自省



Answer 4:

所述__dict__对象的属性是它的所有其他定义的属性的字典。 需要注意的是Python类可以覆盖GETATTR ,使事情看起来像性能,但没有__dict__ 。 还有内建函数vars()dir()这是在微妙的方式不同。 而__slots__可以替代__dict__在一些不寻常的课程。

对象是复杂的Python编写的。 __dict__是开始为反射式编程正确的地方。 dir()是开始,如果你在一个交互式shell黑客左右的地方。



Answer 5:

格奥尔格·scholly较短的版本

print vars(theObject)


Answer 6:

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

如果你只是希望得到一个对象的按键,使用

my_dict.keys()

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


文章来源: How to enumerate an object's properties in Python?