je reçois l'erreur: TypeError: __init __() prend exactement 2 arguments (3 donnés)héritage multiple et super appeler()
Lorsque vous essayez d'instancier un objet de la classe Top:
super (Middle1, auto) .__ init __ (nom, "milieu")
class Base(object):
def __init__(self, name, type):
pass
class Middle1(Base):
def __init__(self, name):
super(Middle1, self).__init__(name, "middle1")
class Middle2(Base):
def __init__(self, name):
super(Middle2, self).__init__(name, "middle2")
class Middle3(Base):
def __init__(self, name):
super(Middle3, self).__init__(name, "middle3")
class Top(Middle1, Middle2, Middle3):
def __init__(self):
super(Top, self).__init__("top")
# Here is where it produces the error
if __name__ == '__main__':
Top()
Qu'est-ce que je ne comprends sur ce multiple problème de l'héritage?
Note: ceci est python 2.7
EDIT
Ok alors j'ai essayé quelque chose que je pense que des œuvres pour mon cas. C'est le résultat final équivélent, je pense que c'est fondamentalement en forçant la profondeur d'abord en n'appelant pas super et appelant chaque individu __init__ à la place.
class Base(object):
def __init__(self, name, type):
pass
class Middle1(Base):
def __init__(self, name, type = "middle1"):
super(Middle1, self).__init__(name, type)
class Middle2(Base):
def __init__(self, name, type = "middle2"):
super(Middle2, self).__init__(name, type)
class Middle3(Base):
def __init__(self, name, type = "middle3"):
super(Middle3, self).__init__(name, type)
class Top(Middle1, Middle2, Middle3):
def __init__(self):
Middle1.__init__(self, "top")
Middle2.__init__(self, "top")
Middle3.__init__(self, "top")
# No errors anymore
if __name__ == '__main__':
Top()
Ce n'est pas techniquement l'héritage multiple.L'héritage multiple est quand une classe hérite directement de plusieurs classes parentes (et n'est généralement pas supportée dans la plupart des langages de programmation). – apokryfos
Avez-vous vérifié que le fichier de code que vous exécutez est celui que vous montrez ici? Parce que ce code ne produit pas cette erreur ... – dhke
Vous aviez raison. J'ai édité le code pour montrer ma situation actuelle, maintenant il produit cette erreur. – Esser420