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])
.
返回按名称排序的(名称,值)对列表中对象的所有成员.如果提供了可选的谓词参数,则仅包含谓词返回true值的成员.
>>> [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中乱砍,那就是开始的地方.
georg scholly较短的版本
print vars(theObject)
如果您正在寻找所有属性的反映,上面的答案都很棒.
如果您只是想获取对象的键,请使用
my_dict.keys()
my_dict = {'abc': {}, 'def': 12, 'ghi': 'string' } my_dict.keys() > ['abc', 'def', 'ghi']