Seite 1 von 1

Funktionsaufruf durch String

Verfasst: Dienstag 18. September 2012, 14:05
von Pytoniac
Hallo,

ich habe mir in einer Funktion eine kleine if-else Abfrage gebaut, momentan sieht diese in etwa so aus:

Code: Alles auswählen

if task == 'foo':
    self.class.foo()
elif task == 'bar':
    self.class.bar()
...
Ist es moeglich, statt des nochmaligen schreibens des Funktionsnamens (in diesem fall foo oder bar) einfach die Variable task anzugeben (String)?

Gruesse
Pytoniac

Re: Funktionsaufruf durch String

Verfasst: Dienstag 18. September 2012, 14:08
von webspider
Das schreit nach Dispatching, eine relativ einfache Abstraktion von wiederkehrenden Strukturen.

Re: Funktionsaufruf durch String

Verfasst: Dienstag 18. September 2012, 15:37
von cofi
Das Tutorial hilft hier nur bedingt weiter, da man fuer dieses Problem eigentlich direkt ein Dictionary und kein alist-Equivalent benutzen will, dann sieht das ganze so aus:

Code: Alles auswählen

task_dispatch = {'foo' : self.class.foo,
                 'bar' : self.class.bar}[task]()
Oder, falls es wirklich alles Attribute von `self.class` sind:

Code: Alles auswählen

getattr(self.class, task)()
Wobei man bei letzterem Wirklich aufpassen sollte, ob es auch wirklich eine Funktion/Methode ist.