Search code examples
pythonfunctionvariablesparametersgetattr

Python using getattr to call function with variable parameters


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


Solution

  • 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.