Wat is de beste manier om een functie aan te roepen gegeven een string met de functie's naam in een Python programma. Bijvoorbeeld, laten we zeggen dat ik een module foo
heb, en ik heb een string waarvan de inhoud "bar"
is. Wat is de beste manier om foo.bar()
aan te roepen?
Ik moet de return waarde van de functie krijgen, daarom gebruik ik niet alleen eval
. Ik heb uitgevonden hoe het moet door eval
te gebruiken om een temp functie te definiëren die het resultaat van die functie-aanroep teruggeeft, maar ik'hoop dat er een elegantere manier is om dit te doen.
Uitgaande van module foo
met methode bar
:
import foo
method_to_call = getattr(foo, 'bar')
result = method_to_call()
Je zou regel 2 en 3 kunnen inkorten tot:
result = getattr(foo, 'bar')()
als dat zinvoller is voor uw toepassing.
Je kunt getattr
op deze manier gebruiken op class instance bound methods, module-level methods, class methods... de lijst gaat maar door.
Patrick's oplossing is waarschijnlijk de schoonste. Als je de module ook dynamisch moet ophalen, kun je hem importeren zoals:
module = __import__('foo')
func = getattr(module, 'bar')
func()