Qual è il modo migliore per chiamare una funzione data una stringa con il nome della funzione in un programma Python. Per esempio, diciamo che ho un modulo foo
, e ho una stringa il cui contenuto è "bar"
. Qual è il modo migliore per chiamare foo.bar()
?
Ho bisogno di ottenere il valore di ritorno della funzione, che è il motivo per cui non uso semplicemente eval
. Ho capito come farlo usando eval
per definire una funzione temporanea che restituisce il risultato di quella chiamata di funzione, ma spero che ci sia un modo più elegante per farlo.
Assumendo il modulo foo
con il metodo bar
:
import foo
method_to_call = getattr(foo, 'bar')
result = method_to_call()
Potresti accorciare le linee 2 e 3 in:
result = getattr(foo, 'bar')()
se questo ha più senso per il tuo caso d'uso.
Potete usare getattr
in questo modo su metodi legati a istanze di classe, metodi a livello di modulo, metodi di classe... la lista continua.
La soluzione di Patrick è probabilmente la più pulita. Se avete bisogno di prelevare dinamicamente anche il modulo, potete importarlo come:
module = __import__('foo')
func = getattr(module, 'bar')
func()