Domanda

Questa è più di una questione di curiosità, piuttosto che un problema serio:

Stavo giocando con più eredità e venne accrostando questo:

>>> 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
.

Ottengo un TypeError.Tuttavia, quando invertivo l'ordine del più ereditario:

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

funziona bene.L'ho presunto che in prima istanza, l'ereditarietà del object prima di A crea una specie di ambiguità del nome.Qualcuno mi interesserebbe a spiegare cosa sta succedendo qui?

È stato utile?

Soluzione

A è ereditato da object o sottoclasse di object, non funziona.La MRO garantisce che le basi più a sinistra vengono visitate prima di quelle a destra - ma garantisce anche che tra gli antenati se x è una sottoclasse di y, X è visitata prima di y.È impossibile soddisfare entrambe queste garanzie in questo caso

Ecco una domanda simile

Python: problema con metaclasses in congiunzione più ereditarietà

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top