Résolue

Super().__init__() dans l'héritage multiple

# Orienté objet # Héritage

> class Parent1:
def init(self):
print("Parent1's constructor called")

> class Parent2:
def init(self):
print("Parent2's constructor called")

> class Child(Parent1, Parent2):
def init(self):
super().init() # Appel du constructeur du premier parent dans la liste d
super(Parent2, self).init() # Appel explicit du constructeur second parent

> child = Child()

la sortie que j'obtiens est uniquement en rapport avec le premier parent et je ne sais pas pourquoi :
> Parent1's constructor called

Salut Yann !

Alors c'est un comportement normal, la méthode super appelle uniquement le constructeur de la première classe mère, dans l'ordre de la liste (donc dans ton cas Parent1.

C'est pour ça que tu vois seulement "Parent1's constructor called".

Si tu veux appeler les constructeurs des deux classes parentes, tu peux le faire directement en utilisant le nom des classes, comme ça :

class Parent1:
    def __init__(self):
        print("Parent1's constructor called")

class Parent2:
    def __init__(self):
        print("Parent2's constructor called")

class Child(Parent1, Parent2):
    def __init__(self):
        Parent1.__init__(self)
        Parent2.__init__(self)

child = Child()

Et tu auras :

Parent1's constructor called
Parent2's constructor called

Je rajouterais que c'est rare qu'on ait besoin de faire du multi-héritage ainsi, et ça peut causer pas mal de problèmes et c'est assez avancé (tu peux lire sur le sujet en cherchant "MRO Python", des heures de plaisir ^^).

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.