迭代对象中的元素

时间:2015-02-02 20:21:26

标签: python iteration

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中只查找按顺序列出的ab属性,而不包含__module____doc__信息,没有任何和所有函数恰好在C

1 个答案:

答案 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