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