I'm using getattr to call different functions depending on a variable.
Im doing something like that:
getattr(foo, bar) ()
That works, calling functions like foo.bar()
My problem is that I have 'bar' functions and I want to call it with different parameters. For example:
def f1() :
pass
def f2(param1) :
pass
def f3(param1,param2) :
pass
so 'bar' could be f1, f2, or f3
I tried this: assumming that params is a list which contains all parameters needed for the 'bar' function
getattr(foo, bar) (for p in params :)
I watching for a "clean" solution, with no needed to watch the length on the params variable
You could try something like:
getattr(foo, bar)(*params)
This works if params
is a list or a tuple. The elements from params
will be unpacked in order:
params=(1, 2)
foo(*params)
is equivalent to:
params=(1, 2)
foo(params[0], params[1])
If there are keyword arguments, you can do that too.
getattr(foo, bar)(*params, **keyword_params)
where keyword_params
is a dictionary.
Also, This answer is really independent of getattr
. It will work for any function/method.