[Python-de] Funktionsname als String übergeben und dann ausführen?
"Martin v. Löwis"
martin at v.loewis.de
Wed Jan 8 00:42:11 EST 2003
Dirk Lannatewitz wrote:
> Da ich diese Option von andere Stelle (Sprache) kenne:
> Compiler evaluate: string
> der String wird als Programmcode gesehen und versucht diesen auszuführen.
>
> Geht das auch in Python?
Klar geht das: Die exec-Anweisung erwartet einen String (und null bis
zwei Dictionaries). Dieser String wird als Folge von Anweisungen
interpretiert und ausgeführt.
Die Funktion eval funktioniert so ähnlich, sie erwartet als erstes
Argument ebenfalls einen String; dieser wird als Ausdruck verstanden.
Der Ausdruck wird berechnet, und eval liefert das Ergebnis des Ausdrucks
zurück.
Was das mit Deinem Problem zutun hat, ist mir allerdings nicht ganz
klar. Wenn Du exec/eval zur Erzeugung neuer Instanzen verwenden willst:
Das ist gar nicht nötig.
Wenn kl eine Klasse ist, kannst Du einfach kl() ausführen und erhälst
eine Instanz. Wenn Du vorab nicht weisst, wie der Name der Klasse ist,
kannst Du die Klasse auch in einer Variablen speichern:
if alter >= 18 and weiblich:
kl = Frau
elif alter >= 18:
kl = Mann
else:
kl = Kind
neuer_mensch = kl(name)
Damit wird wahlweise eine Instanz von Mann, Frau oder Kind erzeugt, je
nachdem, welchen Wert kl hat. Ganz ohne Compiler evaluate:.
Ciao,
Martin
More information about the Python-de
mailing list