Was ist der beste Weg, um über den Aufruf einer Funktion gegeben eine Zeichenfolge mit der Funktion & #39; s Namen in einem Python-Programm zu gehen. Nehmen wir zum Beispiel an, ich habe ein Modul "foo" und eine Zeichenkette, deren Inhalt "bar" ist. Wie rufe ich am besten foo.bar()
auf?
Ich muss den Rückgabewert der Funktion erhalten, weshalb ich nicht einfach eval
verwende. Ich habe herausgefunden, wie ich es machen kann, indem ich eval
verwende, um eine temporäre Funktion zu definieren, die das Ergebnis des Funktionsaufrufs zurückgibt, aber ich hoffe, dass es einen eleganteren Weg gibt, dies zu tun.
Angenommenes Modul foo
mit Methode bar
:
import foo
method_to_call = getattr(foo, 'bar')
result = method_to_call()
Man könnte die Zeilen 2 und 3 kürzen zu:
result = getattr(foo, 'bar')()
kürzen, wenn das für Ihren Anwendungsfall sinnvoller ist.
Sie können getattr
auf diese Weise für an Klasseninstanzen gebundene Methoden, Methoden auf Modulebene, Klassenmethoden... verwenden.
Die Lösung von Patrick ist wahrscheinlich die sauberste. Wenn Sie das Modul auch dynamisch abholen müssen, können Sie es wie folgt importieren:
module = __import__('foo')
func = getattr(module, 'bar')
func()