Pergunta

Esta é mais uma questão de curiosidade, em vez de um problema sério:

Eu estava brincando com a herança múltipla e veio todo este:

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

Eu recebo um TypeError.No entanto, quando eu inverter a ordem de herança múltipla:

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

Ele funciona muito bem.Eu achava que, em primeira instância, a herança de object antes de A cria algum tipo de nome de ambiguidade.Teria alguém se importa de explicar o que está acontecendo aqui?

Foi útil?

Solução

A é herdada a partir de object ou subclasse de object, ele não funciona.O MRO garante que mais à esquerda bases são visitados antes de mais à direita - mas ele também garante que entre os ancestrais se x é uma subclasse de y, então x é visitado antes de y.É impossível satisfazer ambos os garantias, neste caso,

Aqui está uma pergunta semelhante

Python:Problema com metaclasses em conjunto herança múltipla

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top