/me hat geschrieben:
Dann sollte man allerdings auch einheitlich im kompletten Projekt dabeibleiben. Diese klassische Art und die Verwendung von super innerhalb einer Vererbungshierarchie beißen sich ziemlich böse.
Ich persönlich verwende durchgängig super().
Jein. Fuer Konstruktoren - ich natuerlich auch. Wobei man da gerne Fehler macht, weil man in zwei Basisklassen, die direkt von object erben oft vergisst.
Aber bei normalen Methoden ist die Sache nicht gaaanz so einfach - denn da erwarte ich ja genau einen Rueckgabewert, und im Fall eines Diamondshape kommt's auf die MRO an- da gehe ich dann doch gelegentlich hin, und mach's explizit.
Ganz ehrlicherweise ist aber das ganze Problem eh eher gering, das ich mal mehr als 1 Ableitungshierarchie habe kommt *so* selten vor, und Mehrfachvererbung eigentlich immer nur als Pseudo-Mixins.
Code: Alles auswählen
class B(object):
def __init__(self):
#super(B, self).__init__()
print "B.__init__"
def foo(self):
return "B"
class C(object):
def __init__(self):
#super(C, self).__init__()
print "C.__init__"
def foo(self):
return "C"
class D(B, C):
def __init__(self):
# hier mal gaaaaaanz genau hinschauen
# und die Anzahl der Aufrufe im Code
# versus die Anzahl der ausgegebenen vergleichen
super(D, self).__init__()
print "D.__init__"
def foo(self):
return super(D, self).foo()
class E(C, B):
def __init__(self):
# hier mal gaaaaaanz genau hinschauen
# und die Anzahl der Aufrufe im Code
# versus die Anzahl der ausgegebenen vergleichen
super(E, self).__init__()
print "E.__init__"
def foo(self):
return super(E, self).foo()
d = D()
print d.foo()
e = E()
print e.foo()