Appel d'une fonction d'un module en utilisant son nom (une chaîne)

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.

请先 登录 后评论

2 réponses

Patrick Johnmeyer

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.

请先 登录 后评论
HS.

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()
请先 登录 后评论