ich stehe gerade vor einem kleinen Problem mit meiner Vererbungshierarchie und finde einfach keine ellegante Loesung.
Als beispiel habe ich mal folgende Klassenhierarchie erstellt, die das Problem verdeutlichen soll:
Code: Alles auswählen
class A(object):
def __init__(self, param):
print 'A'
class B(A):
def __init__(self, param1, param2):
# super(self.__class__, self).__init__(param1)
# <super: <class 'B'>, <B object>>
# print super(self.__class__, self)
print 'B'
class C(B):
def __init__(self, param1, param2):
# super(self.__class__, self).__init__(param1, param2)
# <super: <class 'C'>, <C object>
# print super(self.__class__, self)
print 'C()'
class D(C):
def __init__(self, param1, param2):
# super(self.__class__, self).__init__(param1, param2)
print 'D()'
A
B
C
D
Nun habe ich die Funktion super() gefunden, die wie es mir scheint, allerdings fuer diese Aufgabe nicht wirklich geeignet ist.
Wenn ich in jedem der Constructoren "super(self.__class__, self).__init__(param1, param2)" einfuege, so gibt es ab der Klasse C Probleme:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in __init__
File "<stdin>", line 3, in __init__
TypeError: __init__() takes exactly 3 arguments (2 given),
und bei Klasse D geht gar nicht's mehr. Nun habe ich nachgelesen und mir scheint es, dass super nur eine bestimmte Klasse aus der Vererbungshierarchy herausnimmt, und dann den Methodenaufruf an die entsprechende Superklasse weiterleitet.
In der Theorie klingt das ganz gut, nur scheint das irgendwie nicht zu funktionieren.
Ich hoffe mir kann hier weitergeholfen werden, denn ich moechte nicht zurueck zu der Methode, wo die Superklasse im Constructor explizit aufscheint.
Daher, bitte um Hilfe ...
Gruesse,
MoE