Méthode super() – Python
La méthode super() vous permet de faire référence à la classe parente. C’est utile en cas d’héritage où on veut appeler des fonctions de la classe mère.
Pour comprendre la méthode super() en python, vous devez connaître l’héritage en Python. Dans l’héritage, les sous-classes héritent la super-classe.
La méthode super() nous permet de référencer implicitement la superclasse. Donc, super rend notre tâche plus facile et confortable. En faisant référence à la superclasse de la sous-classe, nous n’avons pas besoin d’écrire explicitement le nom de la superclasse.
Exemple de la méthode super()
Pour commencer, il suffit de regarder le code suivant que nous avons utilisé dans notre tutoriel sur l’héritage. Dans cet exemple, la superclasse était Vehicule et la sous-classe était Voiture.
class Vehicule(object): # Constructeur def __init__(self, marque, vitesse): self.marque = marque self.vitesse = vitesse # Pour récupérer la marque def getMarque(self): return self.marque # Pour vérifier si cette vehicule est une voiture def estUneVoiture(self): return False # Sous classe class Voiture(Vehicule): def __init__(self, marque, vitesse, nbPort): Vehicule.__init__(self, marque, vitesse) self.nbPort = nbPort def estUneVoiture(self): return True # code de test vh = Vehicule("Moto", 100) # Un objet de vehicule print(vh.getMarque(), vh.estUneVoiture()) vt = Voiture("Mercedes", 300, 4) # Un objet de voiture print(vt.getMarque(), vt.estUneVoiture())
Cela produit le résultat suivant:
Moto False Mercedes True
Dans l’exemple ci-dessus, nous avons appelé la fonction de la classe mère comme ceci:
Vehicule.__init__(self, marque, vitesse)
Nous pouvons remplacer ceci par un appel de super() comme ci-dessous.
super().__init__(marque, vitesse)
La sortie restera la même dans les deux cas.
Notez que la syntaxe ci-dessus est pour la version 3 de python. Si vous utilisez une version 2.x de python, la situation est légèrement différente et vous devrez apporter les modifications suivantes:
super(Voiture, self).__init__(marque, vitesse)
Super() avec l’héritage multi-niveau

Comme nous l’avons indiqué précédemment, la fonction super() nous permet de référencer implicitement la superclasse. Mais dans le cas de l’héritage à plusieurs niveaux, quelle classe référencera-t-il? Eh bien, super() référera toujours la super-classe immédiate.
class A: def increment(self, i): print('Dans la classe A, i =', i) class B(A): def increment(self, i): print('Dans la classe B, i =', i) super().increment(i + 1) class C(B): def increment(self, i): print('Dans la classe C, i =', i) super().increment(i + 1) if __name__ == '__main__': c = C() c.increment(1)
Cela produit le résultat suivant:
Dans la classe C, i = 1 Dans la classe B, i = 2 Dans la classe A, i = 3
La sortie montre clairement que la fonction « increment(i + 1) » de la classe C a été appelée au début, puis de la classe B et enfin la classe A.