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.
 
 
QCM Python

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *