Vous êtes sur la page 1sur 16

L’héritage simple

L’héritage & Polymorphisme

Python et R pour les sciences de données


Chap 5 : Héritage et polymophisme en Python

Laila AMIR

Masters SDAD & GAA

Année universitaire 2019/2020

Laila AMIR 1 / 16
L’héritage simple
L’héritage & Polymorphisme

Plan

1 L’héritage simple
Déclaration de l’héritage
Constructeurs classe fille - classe mère
Surcharger un attribut, une fonction

2 L’héritage & Polymorphisme


L’héritage de classe
Redéfinition de méthode
Polymorphisme

Laila AMIR 2 / 16
L’héritage simple
Constructeurs classe fille - classe mère
L’héritage & Polymorphisme
Surcharger un attribut, une fonction

Outline

1 L’héritage simple
Déclaration de l’héritage
Constructeurs classe fille - classe mère
Surcharger un attribut, une fonction

2 L’héritage & Polymorphisme


L’héritage de classe
Redéfinition de méthode
Polymorphisme

Laila AMIR 3 / 16
L’héritage simple
Constructeurs classe fille - classe mère
L’héritage & Polymorphisme
Surcharger un attribut, une fonction

L’héritage de classe

L’héritage est un concept très utile. Cela permet de créer de


nouvelles classes mais avec une base existante.

Pour stipuler la classe mère, rien de bien compliqué. Cela se


passe à la définition de la classe fille :
1 class MaClasseFille(MaClasseMere):
2 ...

Laila AMIR 4 / 16
L’héritage simple
Constructeurs classe fille - classe mère
L’héritage & Polymorphisme
Surcharger un attribut, une fonction

Constructeurs classe fille - classe mère


Une fois la classe mère définie, il va vous falloir l’initialiser. Pour
cela, il suffit d’appeler le constructeur de la classe mère dans le
constructeur de la classe fille :
1 class MaClasseFille(MaClasseMere):
2 def __init__(self):
3 MaClasseMere.__init__(self)

Veuillez noter qu’en Python 3.X, vous pouvez simplement


utiliser la syntaxe suivante :
1 class MaClasseFille(MaClasseMere):
2 def __init__(self):
3 super().__init__()

Ici, super() est une référence implicite à la classe mère (le terme
super-classe est un synonyme de classe mère). À ce titre, cela
vous dispense d’utiliser le self lors de l’appel.
Laila AMIR 5 / 16
L’héritage simple
Constructeurs classe fille - classe mère
L’héritage & Polymorphisme
Surcharger un attribut, une fonction

Surcharger un attribut, une fonction

Surcharger un attribut est très simple, puisqu’il suffit de


redéfinir sa valeur au sein de la classe fille.
1 ...
2 class MaClasseFille(MaClasseMere):
3 def __init__(self):
4 MaClasseMere.__init__(self)
5 self.attribut-classe-mere = 'nouvelle valeur'

Tout comme pour les attributs, pour surcharger une fonction, il


suffit de la redéfinir.

Rien n’empêche l’élément de la classe fille de faire appel à


l’élément de la classe mère.

Laila AMIR 6 / 16
L’héritage de classe
L’héritage simple
Redéfinition de méthode
L’héritage & Polymorphisme
Polymorphisme

Outline

1 L’héritage simple
Déclaration de l’héritage
Constructeurs classe fille - classe mère
Surcharger un attribut, une fonction

2 L’héritage & Polymorphisme


L’héritage de classe
Redéfinition de méthode
Polymorphisme

Laila AMIR 7 / 16
L’héritage de classe
L’héritage simple
Redéfinition de méthode
L’héritage & Polymorphisme
Polymorphisme

L’héritage de classe

Soit la classe voiture et créons une classe VoitureSport :

Exp 1 VoitureSport hérite de Voiture


1 class Voiture:
2 roues = 4
3 moteur = 1
4 def __init__(self):
5 self.nom = "A déterminer"
6
7 class VoitureSport(Voiture):
8 def __init__(self):
9 self.nom = "Ferrari"

On a indiqué que VoitureSport a hérité de classe Voiture , elle


recupère donc toutes ses méthodes et ses attributs.

Laila AMIR 8 / 16
L’héritage de classe
L’héritage simple
Redéfinition de méthode
L’héritage & Polymorphisme
Polymorphisme

L’héritage de classe
On peut toujours instancier la classe Voiture si on le désire :
1 >>> ma_voiture=Voiture()
2 >>> ma_voiture.nom
3 'A déterminer'
4 >>> ma_voiture.roues
5 4

Instancions maintenant la classe VoitureSport :


1 >>> ma_voiture_sport=VoitureSport()
2 >>> ma_voiture_sport.nom
3 'Ferrari'
4 >>> ma_voiture_sport.roues
5 4

On remarque que l’attribut roues a bien été hérité, et que


la méthode __init__ a écrasé celle de la classe
Voiture : redéfinition de méthode (polymorphisme).
Laila AMIR 9 / 16
L’héritage de classe
L’héritage simple
Redéfinition de méthode
L’héritage & Polymorphisme
Polymorphisme

Redéfinition de méthode
Comme nous l’avons vu plus haut si une classe hérite d’une
autre classe, elle hérite les méthodes de son parent .
1 class Voiture:
2 roues = 4
3 moteur = 1
4 def __init__(self):
5 self.nom = "A déterminer"
6 def allumer(self):
7 print "La voiture démarre"
8 class VoitureSport(Voiture):
9 def __init__(self):
10 self.nom = "Ferrari"
11
12 ma_voiture_sport = VoitureSport()
13 ma_voiture_sport.allumer()

Le résultat :
La voiture démarre
Laila AMIR 10 / 16
L’héritage de classe
L’héritage simple
Redéfinition de méthode
L’héritage & Polymorphisme
Polymorphisme

Redéfinition de méthode
Il est possible d’ écraser la méthode de la classe parente en la
redéfinissant. On parle de redéfinition d’une méthode.
1 class Voiture:
2 roues = 4
3 moteur = 1
4 def __init__(self):
5 self.nom = "A déterminer"
6 def allumer(self):
7 print "La voiture démarre"
8 class VoitureSport(Voiture):
9 def __init__(self):
10 self.nom = "Ferrari"
11 def allumer(self):
12 print "La voiture de sport démarre"
13 ma_voiture_sport = VoitureSport()
14 ma_voiture_sport.allumer()
Le résultat :
La voiture de sport démarre
Laila AMIR 11 / 16
L’héritage de classe
L’héritage simple
Redéfinition de méthode
L’héritage & Polymorphisme
Polymorphisme

Redéfinition de méthode
Enfin dernier point intéressant : il est possible d’appeler la
méthode du parent puis de faire la spécificité de la méthode.
1 class Voiture :
2 roues = 4 Le résultat :
3 moteur = 1
4 def __init__(self): La voiture démarre
5 self.nom = "A déterminer" La voiture de sport démarre
6 def allumer(self):
7 print "La voiture démarre" Les classes Voiture et Voi-
8 class VoitureSport(Voiture):
9 def __init__(self):
tureSport possédent donc cha-
10 self.nom = "Ferrari" cune une méthode de même
11 def allumer(self): nom mais ces méthodes n’éffec-
12 Voiture.allumer(self) tuent pas les mêmes tâches. On
13 print "La voiture de sport
parle dans ce cas de polymor-
,→ démarre"
14 ma_voiture_sport = VoitureSport() phisme .
15 ma_voiture_sport.allumer()
Laila AMIR 12 / 16
L’héritage de classe
L’héritage simple
Redéfinition de méthode
L’héritage & Polymorphisme
Polymorphisme

Notion polymorphisme

Le mot polymorphisme signifie avoir plusieurs formes. En


programmation, polymorphisme signifie que le même nom de
fonction est utilisé pour différents types.
En Python, Polymorphism nous permet de définir des méthodes
dans la classe enfant portant le même nom que les méthodes de
la classe mère. En héritage, la classe enfant hérite des méthodes
de la classe mère. Toutefois, il est possible de modifier une
méthode dans une classe enfant héritée de la classe mère. Ce
processus de réimplémentation d’une méthode dans la classe
enfant s’appelle une méthode redéfinie.

Laila AMIR 13 / 16
L’héritage de classe
L’héritage simple
Redéfinition de méthode
L’héritage & Polymorphisme
Polymorphisme

Polymorphisme avec une liste hétérogène


1 class Personne:
2 def __init__(self,nom):
3 self.nom=nom 1 tab=[]
4 def affiche(self): 2 etd=Etudiant('AAA',123444)
5 print("je suis une personne") 3 tab.append(etd)
6 4
7 class Etudiant(Personne): 5 prf=Professeur('BBB',6766)
8 def __init__(self,nom,cne): 6 tab.append(prf)
9 super().__init__(nom) 7
10 self.cne=cne 8 for obj in tab:
11 def affiche(self): 9 obj.affiche()
12 print("je suis un etudiant")
13 class Professeur(Personne):
14 def __init__(self,nom,ppr): Résultat :
15 super().__init__(nom) je suis un etudiant
16 self.ppr=ppr
17 def affiche(self): je suis un professeur
18 print("je suis un professeur")

Laila AMIR 14 / 16
L’héritage de classe
L’héritage simple
Redéfinition de méthode
L’héritage & Polymorphisme
Polymorphisme

Polymorphisme avec une fonction et des objets

Il est également possible de créer une fonction pouvant accepter


n’importe quel objet, permettant ainsi un polymorphisme. Dans
cet exemple, créons une fonction appelée «ShowMe()» qui
prendra un objet que nous nommerons «obj». Bien que nous
utilisions le nom "obj", tout objet instancié pourra être appelé
dans cette fonction.
Cette méthode appellera la méthode "affiche()" associée à
l’objet actuel "obj"

Laila AMIR 15 / 16
L’héritage de classe
L’héritage simple
Redéfinition de méthode
L’héritage & Polymorphisme
Polymorphisme

Polymorphisme avec une fonction et des objets


1 class Personne:
2 def __init__(self,nom):
3 self.nom=nom
4 def affiche(self): 1 def ShowMe(obj):
5 print("je suis une personne") 2 obj.affiche()
3
6
7 class Etudiant(Personne): 4 etd=Etudiant('AAA',123444)
8 def __init__(self,nom,cne): 5 prf=Professeur('BBB',6766)
9 super().__init__(nom) 6

10 self.cne=cne 7 ShowMe(etd)
11 def affiche(self): 8 ShowMe(prf)
12 print("je suis un etudiant")
13 class Professeur(Personne): Résultat :
14 def __init__(self,nom,ppr):
15 super().__init__(nom) je suis un etudiant
16 self.ppr=ppr je suis un professeur
17 def affiche(self):
18 print("je suis un professeur")

Laila AMIR 16 / 16

Vous aimerez peut-être aussi