Mehrfachvererbung bei Python.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
zizou2981
User
Beiträge: 59
Registriert: Donnerstag 23. Juni 2011, 21:46

Hallo zusammen,

ich habe ein kleines Problem bei Mehrfachvererbung und möchte gern wissen ob in Python dafür eine Lösung gibt. Im Folgenden ist ein einfaches Beispiel:

Code: Alles auswählen

class A:
    def A1(self):
        print 'class A'
    def A2(self):
        print 'class A'
class B(object):
    def B1(self):
        print 'class B'
    def C1(self):
        print 'class B'
class C(object):
    def B1(self):
        print 'class C'
    def C1(self):
        print 'class C'
class D(A, C, B):
    pass
class E(D):
    pass
Wenn ich die Methode C1 über die Klasse E aufrufe, dann wird die Methode C1 von der Klasse C aufgerufen(was für mich ok ist). Wenn ich aber die Methode B1 über E aufrufe, dann wird die B1-Methode von der Klasse C1 aufgerufen. Ich möchte aber die Methode B1 von der Klasse B aufrufen. Gibt es In Python eine Lösung, mit der man entscheiden kann welche Methoden von welcher Klassen aufgerunfen werden sollen?

Code: Alles auswählen

>>>E().C1()
class C
>>>E().B1()
class C
Danke
BlackJack

@zizou2981: IMHO ist Mehrfachvererbung an sich ein Problem. Wenn man das zu mehr als Mixin-Klassen verwendet, steigt die Komplexität in keinem vernünftigen Verhältnis zum potentiellen Gewinn.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Am einfachsten ist es, wenn du die Methode einfach explizit angibst:

Code: Alles auswählen

class E(D):
    def ...:
        B.B1(self, ...)
Alternativ könntest du die Methode auch einfach direkt in E überschreiben:

Code: Alles auswählen

class E(D):
    B1 = B.B1
Und dann solltest du dir vielleicht noch das entsprechende PEP zu Vererbung anschauen, das ist recht interessant.
Das Leben ist wie ein Tennisball.
Antworten