Python usando getattr para llamar a la función con parámetros variables

Estoy usando getattr para llamar a diferentes funciones dependiendo de una variable.

Estoy haciendo algo así:

getattr(foo, bar) () 

Eso funciona, llamando a funciones como foo.bar ()

Mi problema es que tengo funciones de ‘barra’ y quiero llamarlo con diferentes parámetros. Por ejemplo:

 def f1() : pass def f2(param1) : pass def f3(param1,param2) : pass 

así que ‘barra’ podría ser f1, f2 o f3

Intenté esto: asumiendo que params es una lista que contiene todos los parámetros necesarios para la función ‘barra’

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

Estoy buscando una solución “limpia”, sin necesidad de observar la longitud en la variable params

Podrías probar algo como:

 getattr(foo, bar)(*params) 

Esto funciona si params es una lista o una tupla. Los elementos de params se desempaquetarán en orden:

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

es equivalente a:

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

Si hay argumentos de palabras clave, puede hacerlo también.

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

donde keyword_params es un diccionario.

Además, esta respuesta es realmente independiente de getattr . Funcionará para cualquier función / método.