2017-12-15 3 views
-1

Sagen wir, ich unten Hierarchie (ziemlich vereinfacht)Wie Zugang zu Vorfahren Attribut bekommen übersprungen für Eltern

class Ancestor: 
    def __init__(self, *args, **kwargs): 
     super(Ancestor, self).__init__(*args, **kwargs) 
     self.a = 1  

Ich will nicht seine Child Zugriff auf a Attribut haben

class Child(Ancestor): 
    def __init__(self, *args, **kwargs): 
     super(Ancestor, self).__init__(*args, **kwargs) 
     self.b = 2 

Aber ich will seinen Descendant Zugriff haben beide a und b

class Descendant(Child): 
    def __init__(self, *args, **kwargs): 
     super(Descendant, self).__init__(*args, **kwargs) 

Gibt es eine Möglichkeit, gewünschtes Verhalten zu erhalten und mehrfache Vererbung zu vermeiden, z. class Descendant(Ancestor, Child)?

+3

Wenn Sie den Zugriff wollen nicht 'a' Attribut dann erben nicht von' Ancestor'. Erstellen Sie eine weitere Klasse –

+0

@vishes_shell, Es ist keine Option. Ich muss die aktuelle Struktur behalten –

Antwort

1

Dies scheint wie ein Fall für Mehrfachvererbung. Kind sollte nicht von Vorfahr erben, aber Nachkomme von beiden erben:

class Child: 
    ... 

class Descendant(Ancestor, Child): 
    ... 
+0

Ich habe erwähnt, dass ich mehrere Vererbung vermeiden möchte ... –

+0

Sorry, das habe ich nicht gesehen. Warum gerade? –

+0

Wegen einiger merkwürdiger Einschränkungen in Project :) werde ich '-2' in Code Review bekommen, wenn mehrere Vererbungen angewendet werden sollen –

Verwandte Themen