Question

C'est plus une question de curiosité qu'un problème sérieux :

Je jouais avec l'héritage multiple et je suis tombé sur ceci :

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

J'ai un TypeError.Cependant, lorsque j'inverse l'ordre de l'héritage multiple :

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

Ça fonctionne bien.J'ai supposé qu'en premier lieu, l'héritage de object avant A crée une sorte d’ambiguïté dans le nom.Quelqu'un voudrait-il expliquer ce qui se passe ici ?

Était-ce utile?

La solution

A est hérité de object ou sous-classe de object, ça ne marche pas.Le MRO garantit que les bases les plus à gauche sont visitées avant celles les plus à droite - mais il garantit également que parmi les ancêtres, si x est une sous-classe de y, alors x est visité avant y.Il est impossible de satisfaire à ces deux garanties dans ce cas

Voici une question similaire

Python:Problème avec les métaclasses en conjonction avec l'héritage multiple

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top