2014-02-19 3 views
5

foo.py를 가져온 후에이 함수를 호출합니다. Foo에는 내가 호출해야하는 몇 가지 메소드가 있습니다. foo.paint, foo.draw을 :모듈 함수를 반복하는 방법

나는 모든 기능 foo.paint을 통해 전화를 반복하는 while 루프를 사용할 필요가
import foo 

code 

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

, 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 if, f in foo .__ dict __. iteritems() if callable (f)]. AttributeError : 'dict'객체에 'iteritems'속성이 없습니다. – wakamdr

관련 문제