[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