Python iterating through object attributes
我在尝试理解对象的迭代时发现了这个问题,并从Eric Leschinski发现了这个回应:
class C:
a = 5
b = [1,2,3]
def foobar():
b = "hi"
c = C
for attr, value in c.__dict__.iteritems():
print "Attribute: " + str(attr or "")
print "Value: " + str(value or "")
其中生成的文本列出了类C
中的所有属性,包括函数和隐藏属性(由下划线包围),如下所示:
python test.py
Attribute: a
Value: 5
Attribute: foobar
Value: <function foobar at 0x7fe74f8bfc08>
Attribute: __module__
Value: __main__
Attribute: b
Value: [1, 2, 3]
Attribute: __doc__
Value:
现在,我了解如何过滤掉隐藏的&#39;迭代中的属性,但有没有办法过滤掉所有函数呢?实际上,我在课程C
中只查找按顺序列出的a
和b
属性,而不包含__module__
和__doc__
信息,没有任何和所有函数恰好在C
。
答案 0 :(得分:2)
你必须过滤类型; function
个对象就像其他对象一样属性。你可以在这里使用inspect.isfunction()
predicate function:
import inspect
for name, value in vars(C).iteritems():
if inspect.isfunction(value):
continue
if name[:2] + name[-2:] == '____':
continue
您可以将inspect.getmembers()
function与自定义谓词一起使用:
isnotfunction = lambda o: not inspect.isfunction(o)
for name, value in inspect.getmembers(C, isnotfunction):
if name[:2] + name[-2:] == '____':
continue