Re: [Python-de] elif auflösen

Andreas Jung andreas at andreas-jung.com
Mit Apr 21 09:25:38 CEST 2004


Warum machst Du keine Sprungtabelle:

def method1(args):
...
def method2(args).
..


table = {
  'v1' : method1,
  'v2' : method2,
}


method = table.get(somevalue)
method(args)


Andreas




--On Mittwoch, 21. April 2004 9:17 Uhr +0200 Olaf 'Rübezahl' Radicke 
<olaf_rad at gmx.de> wrote:

> Hi!
>
> Ich habe eine Klassen-Funktion die langsam ins
> Uferlose wägst. Es handelt sich um eine abgeleitet
> Klasse von xml.parsers.expat und dessen Tag-Funktionen.
>
> Sie besteht mittlerweile auf fast 600 Zeilen elif-Anweisungen.
> Jetzt habe ich überlegt wie ich das aufdröseln kann um
> daraus mehere Klassen mit mehren Funktionen zu
> machen. Ich bin jetzt zu folgendem Ergebnis gekommen,
> wo bei ich sagen muss, das ich auch die elif Anweisungen
> hatte völlig weglassen können, wenn ich noch eine
> weiter Klasse gemacht hätte, die die zuständigen Objekte
> 'ausspuckt' aber ich glaube dann hätte die Lesbarkeit
> des Codes gelitten.
>
> Aber vielleicht fällt euch ja noch was ganz geniales ein...
>
> Der Code als 'Robinsonade':
>
>
> class unter_class1:
>     """ Die Klasse repräsentiert einen Namensraum 'obj_eins' """
>     def print_func_1(self,arg):
>         print "Class 1 Func1 arg: ",arg
>
>     def print_func_2(self,arg):
>         print "Class 1 Func2 arg: ",arg
>
>     def print_func_3(self,arg):
>         print "Class 1 Func3 arg: ",arg
>
>
> class unter_class2:
>     """ Die Klasse repräsentiert einen Namensraum 'obj_zwei' """
>     def print_func_1(self,arg):
>         print "Class 2 Func 1 arg: ",arg
>
>     def print_func_2(self,arg):
>         print "Class 2 Func 2 arg: ",arg
>
>     def print_func_3(self,arg):
>         print "Class 2 Func 3 arg: ",arg
>
># Die Funktion dieser beiden Klassen waren zuvor
># in einer
>
> class test:
>
>     def var_func(self, arg1, arg2):
>         if arg1 == "obj_eins":
>             func = getattr(c1, "print_" + arg2)
>         elif arg1 == "obj_zwei":
>             func = getattr(c2, "print_" + arg2)
>         return func
>
> c1 =  unter_class1()
> c2 =  unter_class2()
>
> t = test()
>
> t.var_func("obj_eins","func_1")("a")
># Der tag hätte lauten können : <obj_eins:func_1 wert='a'>
>
> t.var_func("obj_eins","func_2")("b")
># Der tag hätte lauten können : <obj_eins:func_2 wert='b'>
>
> t.var_func("obj_eins","func_3")("c")
># usw.
> t.var_func("obj_zwei","func_1")("a")
> t.var_func("obj_zwei","func_2")("b")
> t.var_func("obj_zwei","func_3")("c")
>
># Gruß Olaf
>
>
> _______________________________________________
> python-de maillist  -  python-de at python.net
> http://python.net/mailman/listinfo/python-de