2012-08-02 3 views
9

getattr을 사용하여 변수에 따라 다른 함수를 호출합니다. 그런getattr을 사용하여 변수 매개 변수를 사용하여 함수를 호출하는 Python

임하고 뭔가 :

getattr(foo, bar)() 

foo.bar 같은 함수()를 호출, 작동

내 문제는 내가 '바'기능을 가지고 내가 다른과를 ​​호출 할 매개 변수. 예를 들어

def f1() : 
    pass 

def f2(param1) : 
    pass 

def f3(param1,param2) : 
    pass 

그래서 '바'F1, F2, 또는 F3

I이 시도

같을 수 를 그 PARAMS '바'기능에 필요한 모든 매개 변수를 포함하는리스트이다 assumming

getattr(foo, bar) (for p in params :) 

더 당신은 같은 것을 시도 할 수

답변

16

변수 PARAMS의 길이를보고 필요로 나는, "깨끗한"솔루션을보고하지 :

getattr(foo, bar)(*params) 

params이 목록 또는 튜플 인 경우 작동합니다. params에서 요소는 순서에 압축 해제됩니다 키워드 인자가있는 경우

params=(1, 2) 
foo(params[0], params[1]) 

, 당신은 너무 수행 할 수

params=(1, 2) 
foo(*params) 

은 동일합니다.

getattr(foo, bar)(*params, **keyword_params) 

여기에서 keyword_params은 사전입니다.

또한이 답변은 실제로 getattr과 관련이 없습니다. 그것은 어떤 함수/메소드에서도 작동 할 것입니다.

+2

나는 OP가 구체적으로 질문하지 않았지만, ** kwargs도 추가 했으므로 나중에 키워드 인수를 사용하려고하면 버그를 추적하기가 어렵지 않습니다. –

+0

@ sr2222 - 추가됨. – mgilson

관련 문제