Seite 1 von 1

Mehrfachvererbung bei Python.

Verfasst: Samstag 7. Juli 2012, 09:50
von zizou2981
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

Re: Mehrfachvererbung bei Python.

Verfasst: Samstag 7. Juli 2012, 10:16
von 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.

Re: Mehrfachvererbung bei Python.

Verfasst: Samstag 7. Juli 2012, 11:45
von EyDu
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.