2016-12-09 2 views
-1
class One(object): 
    def __init__(self, i = 0): 
     print('one', i) 

class Two(One): 
    def __init__(self, i = 0): 
     super().__init__(i) 
     print('two', i) 

class First(object): 
    def __init__(self, i = 0): 
     print('first', i) 

class Second(First): 
    def __init__(self, i = 0): 
     super().__init__(i) 
     print('second', i) 

class Third(Second, Two): 
    def __init__(self, i = 0): 
     super().__init__(i) 
     print('third', i) 

class Fourth(Two, Second): 
    def __init__(self, i = 0): 
     super().__init__(i) 
     print('fourth', i) 

Output:
Third (3):
erste 3
zweiten 3
dritte 3

Vierte (4):
one 4
zwei 4
vierte 4

Warum Vererbung nicht funktioniert, wie kann Ich befestige es.
Danke für Ihre Hilfe.
Inheritance arbeitet nicht in Python-Code

+6

Bitte beschreiben Sie Ihr tatsächliches Problem. Ich versichere Ihnen Erbschaftsarbeiten. – Carcigenicate

+0

Die Formatierung Ihres Codes ist grausam, mit '
' und ' ' ist nicht die Art, es zu formatieren. Einrücken Sie es einfach um vier Leerzeichen. –

+0

Bitte korrigieren Sie Ihre Code-Formatierung! Dazu sind Werkzeuge im Post-Editor integriert. – Soviut

Antwort

1

Sie müssen super().__init__() in den Basisklassen One und First aufrufen, damit die benachbarten Klassen initialisiert werden können.

class One(object): 
    def __init__(self, i = 0): 
     super().__init__() 
     print('one', i) 

.... 

class First(object): 
    def __init__(self, i = 0): 
     super().__init__() 
     print('first', i) 
.... 

>>> Fourth() 
first 0 
second 0 
one 0 
two 0 
fourth 0 
+0

Ausgabe von Vierten (4) ist nicht gut, erste und zweite zeigen immer noch 0, warum? – Jaswinder

+0

Wenn ich Parameter in der Basisklasse übergebe, erhalte ich einen Fehler: TypeError: Objekt .__ init __() nimmt keine Parameter – Jaswinder

+0

ohne Ihren tatsächlichen Anwendungsfall zu kennen, gibt es absolut keine Möglichkeit, dass ich Ihnen helfen kann. Ich würde empfehlen, dass Sie versuchen, den Namen der aktuellen Klasse als 'i'-Wert zu übergeben, um zu sehen, wie die Kette von init-Anrufen führt, aber ich bin mir nicht sicher, wie Sie ein solches Setup im tatsächlichen Code verwenden möchten. –