Dynamischer Aufruf der Methode In Python 2.7 mit strings der Methode Namen
Ich habe ein Tupel, die Listen unten die Methoden einer Klasse wie:
t = ('methA','methB','methC','methD','methE','methF')
usw..
Nun muss ich dynamisch aufrufen dieser Methoden basiert auf einer Benutzer-Auswahl. Die Methoden, die aufgerufen werden, basierend auf dem index. Also, wenn ein Benutzer wählt '0', methA
wird aufgerufen, falls '5', methF
genannt wird.
Meine Methode dies zu tun ist wie folgt:
def makeSelection(self, selected):
#methodname = t[selected]
#but as this is from within the class , it has to be appended with 'self.'methodname
# also need to pass some arguments locally calculated here
Ich es geschafft habe, zu arbeiten, etwas mit eval
aber es führt zu Fehler und ist überhaupt nicht elegant.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie den Aufruf einer Methode auf ein Objekt (einschließlich der importierten Module) können Sie:
Wenn Sie brauchen, um eine Funktion aufzurufen, die im aktuellen Modul
wo
args
ist eine Liste oder ein Tupel von Argumenten zu senden, oder Sie können einfach die Liste heraus, in der Sie den Anruf wie jede andere Funktion. Da Sie in einer Methode, die versucht, eine andere Methode aufgerufen, die auf das gleiche Objekt, verwenden Sie den ersten mitself
im Ortobj
getattr nimmt ein Objekt und einen string, und nicht ein Attribut-lookup in das Objekt ein, die das Attribut, wenn es vorhanden ist.
obj.x
undgetattr(obj, 'x')
das gleiche Ergebnis zu erzielen. Es gibt auch diesetattr
,hasattr
, unddelattr
Funktionen, wenn Sie wollen, schauen weiter in dieser Art der Reflexion.Eine völlig alternative Herangehensweise:
Nach bemerken, dass die Menge an Aufmerksamkeit, die diese Antwort erhalten hat, werde ich vorschlagen, einen anderen Ansatz zu dem, was du tust. Ich gehe davon aus, dass einige Methoden existieren
Machen jede Methode entsprechen einer Zahl (Auswahl) Baue ich ein Wörterbuch Zuordnung von zahlen zu den Methoden selbst
In diesem
id_to_method[0]()
aufrufen würdemethA
. Es sind zwei Teile, der erste istid_to_method[0]
die ruft die Funktion Objekt aus dem Wörterbuch, dann die()
es nennt. Ich konnte auch argumentid_to_method[0]("whatever", "args", "I", "want)
In Ihrem code, da die oben genannten würden Sie wahrscheinlich so etwas wie
getattr
ähnlich wie hier. Ich bin mir nicht sicher, ob ich verstehe, was Sie wollen.getattr
trick, aber es funktioniert einfach nicht schön anzusehen.