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

192 投票
8 回答
242976 浏览
提问于 2025-04-15 13:29

在C#中,我们通过一种叫做反射的方式来实现这个功能。而在JavaScript中,这个过程就简单多了:

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

那在Python中该怎么做呢?

8 个回答

75

可以查看 inspect.getmembers(object[, predicate])

这个函数会返回一个列表,里面包含了一个对象的所有成员,以(名字,值)对的形式排列,并且按名字排序。如果你提供了一个可选的条件参数(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']
>>> 
94

dir() 是一个很简单的方法。你可以在这里查看:

Python 反射指南

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

要注意,在一些少见的情况下,有一个叫做 __slots__ 的属性,这种类通常是没有 __dict__ 的。

撰写回答