Ich habe ein Tupel, das die Methoden einer Klasse wie folgt auflistet:
%Vor%und so weiter ..
Jetzt muss ich diese Methoden basierend auf einer benutzerdefinierten Auswahl dynamisch aufrufen. Die Methoden sollen auf Basis des Indexes aufgerufen werden. Wenn also ein Benutzer '0' auswählt, wird methA
aufgerufen, wenn '5', methF
aufgerufen wird.
Meine Methode hierfür ist wie folgt:
%Vor% Ich habe es geschafft, etwas mit eval
zu erarbeiten, aber es ergibt Fehler und ist überhaupt nicht elegant.
Wenn Sie eine Methode für ein Objekt (einschließlich importierter Module) aufrufen, können Sie Folgendes verwenden:
%Vor%Wenn Sie eine Funktion im aktuellen Modul aufrufen müssen
%Vor% Dabei steht args
für eine Liste oder ein Tupel von zu sendenden Argumenten, oder Sie können sie einfach wie jede andere Funktion im Aufruf auflisten. Da Sie in einer Methode sind, die versucht, eine andere Methode für dasselbe Objekt aufzurufen, verwenden Sie die erste mit self
anstelle von obj
getattr nimmt ein Objekt und eine Zeichenfolge und führt eine Attributsuche im Objekt aus. Gibt das Attribut zurück, wenn es existiert. obj.x
und getattr(obj, 'x')
erreichen das gleiche Ergebnis. Es gibt auch die Funktionen setattr
, hasattr
und delattr
, wenn Sie diese Art der Reflexion genauer betrachten möchten.
Ein völlig alternativer Ansatz:
Nachdem ich bemerkt habe, wie viel Aufmerksamkeit diese Antwort erhalten hat, werde ich einen anderen Ansatz vorschlagen, was Sie tun. Ich nehme an, einige Methoden existieren
Damit jede Methode einer Zahl entspricht (Auswahl), erstelle ich ein Wörterbuch, das Zahlen den Methoden selbst zuordnet
%Vor% Gegeben würde id_to_method[0]()
methA
aufrufen. Es besteht aus zwei Teilen, erstens ist id_to_method[0]
, das das Funktionsobjekt aus dem Wörterbuch holt, dann ruft es ()
auf. Ich könnte auch Argument id_to_method[0]("whatever", "args", "I", "want)
übergeben
In deinem echten Code hättest du wahrscheinlich so etwas wie
Tags und Links python python-2.7