La solution de Patrick est probablement la plus propre. Si vous avez également besoin de récupérer dynamiquement le module, vous pouvez l'importer comme :
module = __import__('foo')
func = getattr(module, 'bar')
func()
Quelle est la meilleure façon d'appeler une fonction à partir d'une chaîne avec le nom de la fonction dans un programme Python ? Par exemple, disons que j'ai un module foo
, et j'ai une chaîne dont le contenu est 'bar'
. Quelle est la meilleure façon d'appeler foo.bar()
?
J'ai besoin d'obtenir la valeur de retour de la fonction, c'est pourquoi je n'utilise pas simplement eval
. J'ai compris comment le faire en utilisant eval
pour définir une fonction temporaire qui renvoie le résultat de cet appel de fonction, mais j'espère qu'il existe une manière plus élégante de le faire.
La solution de Patrick est probablement la plus propre. Si vous avez également besoin de récupérer dynamiquement le module, vous pouvez l'importer comme :
module = __import__('foo')
func = getattr(module, 'bar')
func()
En supposant que le module foo
avec la méthode bar
:
import foo
method_to_call = getattr(foo, 'bar')
result = method_to_call()
En ce qui concerne cela, les lignes 2 et 3 peuvent être compressées en :
result = getattr(foo, 'bar')()
si cela a plus de sens pour votre cas d'utilisation. Vous pouvez utiliser getattr
de cette manière sur les méthodes liées aux instances de classe, les méthodes au niveau du module, les méthodes de classe... la liste continue.