/ / Python Mehrfachvererbung Beispiel - Python, Klasse, Python-2.7, Mehrfachvererbung, super

Beispiel für Python-Mehrfachvererbung - Python, Klasse, Python-2.7, Mehrfachvererbung, Super

Ich habe diese Situation

class A(object):

def __init__(self):
self.x = 0
self.y = 0

class B(A):
def __init__(self):
super(B, self).__init__()

def method(self):
self.x += 1

class C(A):

def __init__(self):
super(C, self).__init__()

def method(self):
self.y += 1

class D(B, C):

def __init__(self):
super(D, self).__init__()

def method(self):
print self.x
print self.y

Ich möchte, dass D 1 sowohl für x als auch für y druckt, aber es druckt 0.
Ich verstehe die Mehrfachvererbung / super / etc nicht vollständig. Und während ich versucht habe, die Dokumente zu lesen, wäre eine Erläuterung des Beispiels für mich sehr hilfreich.

Vielen Dank!

Antworten:

1 für die Antwort № 1

Wenn Sie ein D-Objekt erstellen, ruft es nie eine Methode namens "method" auf. Es wird nur Eltern "s" anrufendrin"Methode. Also x oder y wird sich nicht ändern.


2 für die Antwort № 2

Wenn Sie eine Methode wie überschreiben method in Ihrem Beispiel, aber immer noch wollen Sie das Verhalten der Basisklasse sowie Ihre eigenen, müssen Sie verwenden super Um die Version der Methode, die Sie überschreiben, aufzurufen.

class A(object):
def __init__(self):
self.x = 0
self.y = 0

def method(self):  # we need a verion of method() to end the super() calls at
pass

class B(A):
def method(self):
super(B, self).method() # call overridden version of method()
self.x += 1

class C(A):
def method(self):
super(C, self).method() # here too
self.y += 1

class D(B, C):
def method(self):
super(D, self).method() # and here
print self.x
print self.y

Ich habe das überflüssige entfernt __init__ Methoden in Ihren untergeordneten Klassen. Es gibt keine Notwendigkeit, eine Methode zu überschreiben, es sei denn, Sie ändern ihr Verhalten und keine der späteren __init__ Methoden haben alles andere als ihren Vorgänger aufgerufen.