2014-02-19 48 views
5

我在導入foo.py後調用了這個函數。 Foo有幾種方法需要我打電話給foo.paint,foo.draw:如何迭代模塊的功能

import foo 

code 

if foo: 
    getattr(foo, 'paint')() 

我需要通過所有功能foo.paint使用while循環調用和迭代,foo.draw等我怎麼做呢?

+0

我不認爲這是一個重複。在這個問題上,OP只需要信息,在這一個他實際上想要調用的功能。 –

回答

16

您可以使用foo.__dict__在某種程度上是這樣的:

for name, val in foo.__dict__.iteritems(): # iterate through every module's attributes 
    if callable(val):      # check if callable (normally functions) 
     val()        # call it 

但是要注意,這將執行模塊中的每個功能(可贖回)。如果某個特定的函數收到任何參數,它將會失敗。

更優雅(功能)的方式來獲得的功能將是:

[f for _, f in foo.__dict__.iteritems() if callable(f)] 

例如,這會列出所有的功能在math方法:

import math 
[name for name, val in math.__dict__.iteritems() if callable(val)] 
['pow', 
'fsum', 
'cosh', 
'ldexp', 
...] 
+0

@BiRico但這些是_module_的方法。 –

+0

@wakamdr它爲你工作? –

+0

對python來說是個新東西,對於如何實現這個有點困惑:[f for _,f in foo .__ dict __。iteritems()if callable(f)]。我得到AttributeError:'dict'對象沒有屬性'iteritems' – wakamdr