[Python-de] elif auflösen

Olaf 'Rübezahl' Radicke olaf_rad at gmx.de
Mit Apr 21 09:17:32 CEST 2004


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