Riesige Konstruktoren bändigen
Verfasst: Freitag 28. Mai 2010, 13:47
Hi Community,
ich arbeite gerade an einem python projekt, wo es heißt mit Objekten zu arbeiten, die viele Daten beherbergen
Nun stellt sich die Frage wie geht ihr mit riesigen Konstruktoren um?
Bsp.:
Habt ihr dafür ein "Rezept" wie man daraus ansehnlicheren Code schreibt? Was macht ihr wenn ihr das 80 Zeilen Limit einhalten wollt?
Vor allem, was macht ihr wenn sich solche Konstruktoren über mehrere Klassen hinweg häufen?
Eine Möglichkeit wäre eine Vererbung festzustellen, aber nur da wo sie auch wirklich Sinn macht, und entsprechend die Konstruktoren anpassen:
Leider funktioniert das obige Beispiel noch nicht so ganz. Was mache ich falsch?
Leider wird es dadurch, sofern das Beispiel mal funktioniert, auch nicht wirklich übersichtlicher, da man immer bei A nachschauen muss, was denn überhaupt von B oder C verlangt wird.
Wie ihr seht befinde ich mich in einem Dilemma
Grüße,
anogayales
ich arbeite gerade an einem python projekt, wo es heißt mit Objekten zu arbeiten, die viele Daten beherbergen

Nun stellt sich die Frage wie geht ihr mit riesigen Konstruktoren um?
Bsp.:
Code: Alles auswählen
class A(object):
def __init__(self, a, b, c, d, f = None, g = None, weiter = None, nochweiter = None, nochsehrvielweiter = None, unendlich = None):
pass
Vor allem, was macht ihr wenn sich solche Konstruktoren über mehrere Klassen hinweg häufen?
Eine Möglichkeit wäre eine Vererbung festzustellen, aber nur da wo sie auch wirklich Sinn macht, und entsprechend die Konstruktoren anpassen:
Code: Alles auswählen
class A(object):
def __init__(self, a, b, c, d, f = None, g = None, weiter = None, nochweiter = None, nochsehrvielweiter = None, unendlich = None):
print a, b, c, d
pass
class B(A):
def __init__(self, *args, **kwargs):
super(*args, **kwargs)
pass
class C(A):
def __init__(self, *args, **kwargs):
super(*args, **kwargs)
pass
class D(A):
def __init__(self, *args, **kwargs):
super(*args, **kwargs)
pass
Leider wird es dadurch, sofern das Beispiel mal funktioniert, auch nicht wirklich übersichtlicher, da man immer bei A nachschauen muss, was denn überhaupt von B oder C verlangt wird.
Wie ihr seht befinde ich mich in einem Dilemma

Grüße,
anogayales