Pregunta

Esto es más una cuestión de curiosidad que un problema serio:

Estaba jugando con la herencia múltiple y me encontré con esto:

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

Yo tengo un TypeError.Sin embargo, cuando invierto el orden de la herencia múltiple:

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

Funciona bien.Supuse que en primera instancia, la herencia de object antes A crea algún tipo de ambigüedad en el nombre.¿A alguien le importaría explicar qué está pasando aquí?

¿Fue útil?

Solución

A se hereda de object o subclase de object, no funciona.El MRO garantiza que las bases más a la izquierda se visitan antes que las de la derecha, pero también garantiza que entre los ancestros, si x es una subclase de y, entonces x se visita antes que y.Es imposible satisfacer ambas garantías en este caso.

Aquí hay una pregunta similar

Pitón:Problema con metaclases en conjunto con herencia múltiple.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top