IC#我们做到这一点通过反射。 在Javascript中是简单的:
for(var propertyName in objectName)
var currentPropertyValue = objectName[propertyName];
如何做到这一点在Python?
IC#我们做到这一点通过反射。 在Javascript中是简单的:
for(var propertyName in objectName)
var currentPropertyValue = objectName[propertyName];
如何做到这一点在Python?
for property, value in vars(theObject).iteritems():
print property, ": ", value
要知道,在某些罕见的情况下有一个__slots__
属性,这些类往往没有__dict__
。
见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']
>>>
dir()
是一个简单的方法。 看这里:
引导Python的自省
所述__dict__
对象的属性是它的所有其他定义的属性的字典。 需要注意的是Python类可以覆盖GETATTR ,使事情看起来像性能,但没有__dict__
。 还有内建函数vars()
和dir()
这是在微妙的方式不同。 而__slots__
可以替代__dict__
在一些不寻常的课程。
对象是复杂的Python编写的。 __dict__
是开始为反射式编程正确的地方。 dir()
是开始,如果你在一个交互式shell黑客左右的地方。
格奥尔格·scholly较短的版本
print vars(theObject)
如果你正在寻找所有属性的反映,以上的答案是伟大的。
如果你只是希望得到一个对象的按键,使用
my_dict.keys()
my_dict = {'abc': {}, 'def': 12, 'ghi': 'string' }
my_dict.keys()
> ['abc', 'def', 'ghi']