À quoi sert la fonction super en Python ? - Docstring

À quoi sert la fonction super en Python ?

La fonction super est généralement utilisée pour obtenir la classe parente sans avoir besoin de la nommer explicitement.

On l'utilise donc généralement pour faire de la délégation, notamment à l'intérieur de la méthode __init__ dans le cas d'une classe qui hérite d'une autre classe :

class Employee:
    def __init__(self, name, surname):
        self.name = name
        self.surname = surname

class Boss(Employee):
    def __init__(self, name, surname):
        # Sans super
        # Employee.__init__(self, name=name, surname=surname)
        super().__init__(name=name, surname=surname)
        self.big_boss = True


boss = Boss(name="John", surname="Smith")
print(boss.name, boss.surname)

On utilise ici super pour ne pas avoir à écrire explicitement le nom de la classe dont Boss hérite (ici, Employee).

La ligne :

#norun
Employee.__init__(self, name=name, surname=surname)

Est donc équivalente à :

#norun
super().__init__(name=name, surname=surname)
Avec Python 2, il fallait passer la classe et l'instance à la fonction super (super(Boss, self).__init__(name, surname)) mais ce n'est plus le cas avec Python 3.

À noter que cette fonction peut être utilisée en dehors de la méthode __init__ (et même en dehors d'une fonction ou d'une classe).

Par exemple dans le code ci-dessous, on surcharge la méthode parle de la classe Employee dans la classe Boss pour y ajouter un print

On utilise la fonction super pour appeler la méthode parle de la classe parente :

class Employee:
    def __init__(self, name, surname):
        self.name = name
        self.surname = surname

    def parle(self):
        print("Je m'appelle", self.name)

class Boss(Employee):
    def __init__(self, name, surname):
        # Sans super
        # Employee.__init__(self, name=name, surname=surname)
        super().__init__(name=name, surname=surname)
        self.big_boss = True

    def parle(self):
        super().parle()  # On pourrait à la place écrire Employee.parle(self)
        print("...et je suis le Boss 😎")

patrick = Employee(name="Patrick", surname="Tremblay")
boss = Boss(name="John", surname="Smith")

patrick.parle()
boss.parle()

La fonction super est également utilisée de façon beaucoup plus complexe pour pouvoir manipuler le « MRO » (Method Resolution Order ou « ordre de résolution des méthodes » en français).

Si vous souhaitez en savoir plus sur cette utilisation de la fonction super, je vous recommande la lecture de cet excellent article.

Réservé aux membres abonnés

Inscris-toi

Pour pouvoir prendre des notes et ajouter des favoris tu dois être abonné à Docstring.

Voir les formules

Mes notes

Sauvegardé

Passages surlignés

Besoin d'aide ?

Essaie d'être le plus exhaustif possible en donnant suffisamment de détails pour qu'on puisse te répondre du premier coup 😉

Tu souhaites nous remonter un bug ? Utilise-plutôt ce formulaire.

Cette fonctionnalité est réservée aux membres de la formule accompagnement de Docstring.

Aucun résultat.

Un problème sur le site ?

Aide-nous à améliorer Docstring en nous signalant un problème que tu as rencontré.

Que ce soit un bug sur une fonctionnalité ou une erreur dans une formation, on va pouvoir le corriger rapidement 😉

Page concernée

M'avertir par e-mail

Je veux être averti par e-mail lorsque ce bug est corrigé.