Frage

Dies ist eher eine Frage der Neugier als ein ernstes Problem:

Ich habe mit Mehrfachvererbung herumgespielt und bin auf Folgendes gestoßen:

>>> class A(object):
...     def __init__(self): print "A.__init__() called"
...
>>> class B(object, A): pass
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Cannot create consisten method resolution
order (MRO) for bases object, A

Ich bekomme ein TypeError.Wenn ich jedoch die Reihenfolge der Mehrfachvererbung umkehre:

>>> class B(A, object): pass
>>> b = B()
A.__init__() called

Es funktioniert gut.Ich ging davon aus, dass es in erster Linie um die Vererbung von geht object Vor A erzeugt eine Art Namensmehrdeutigkeit.Möchte jemand erklären, was hier vor sich geht?

War es hilfreich?

Lösung

A wird geerbt von object oder Unterklasse von object, es funktioniert nicht.Das MRO garantiert, dass die Basen ganz links vor den Basen ganz rechts besucht werden – aber es garantiert auch, dass unter den Vorfahren, wenn x eine Unterklasse von y ist, x vor y besucht wird.In diesem Fall ist es unmöglich, beide Garantien zu erfüllen

Hier ist eine ähnliche Frage

Python:Problem mit Metaklassen in Verbindung mit Mehrfachvererbung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top