Héritage
L'héritage de classe en Python
L'héritage nous permet de définir une classe qui hérite de toutes les méthodes et propriétés d'une autre classe.
La classe parent est la classe dont on hérite, aussi appelée classe de base.
La classe enfant est la classe qui hérite d'une autre classe, aussi appelée classe dérivée.
Créer une classe parente avec Python
N'importe quelle classe peut être une classe mère. La syntaxe est la même que pour toute autre classe.
Créer une classe nommée Personne, avec les propriétés prénom et nom de famille, et qui affiche le nom :
class Personne: def __init__(self, fname, lname): self.firstname = fname self.lastname = lname def printname(self): print(self.firstname, self.lastname) #Utilisez la classe Personne pour créer un objet, puis exécutez la méthode d'affichage : x = Personne("Aude", "Javel") x.printname()
Créer une classe enfant en Python
Pour créer une classe qui hérite de la fonctionnalité d'une autre classe, envoyez la classe mère comme paramètre lors de la création de la classe enfant.
Créer une classe nommée Etudiant, qui héritera des propriétés et méthodes de la classe Personne :
class Etudiant(Personne): pass
Remarque : Utilisez l'instruction pass lorsque vous ne voulez pas ajouter d'autres propriétés ou méthodes à la classe Python.
Maintenant la classe Etudiant a les mêmes propriétés et méthodes que la classe Personne.
Ajouter la fonction init()
Jusqu'à présent, nous avons créé une classe enfant qui hérite des propriétés et des méthodes de son parent.
Nous voulons ajouter la fonction init() à la classe enfant (au lieu de l'instruction pass).
Note : La fonction init() est appelée automatiquement chaque fois que la classe est utilisée pour créer un nouvel objet.
class Etudiant(Personne): def __init__(self, fname, lname): #add properties etc.
Lorsque vous ajoutez la fonction init(), la classe enfant n'héritera plus de la fonction init() du parent.
Note : La fonction init() de l'enfant remplace l'héritage de la fonction init() du parent.
Pour conserver l'héritage de la fonction init() du parent, ajoutez un appel à la fonction init() du parent :
class Etudiant(Personne): def __init__(self, fname, lname): Personne.__init__(self, fname, lname)
Nous avons maintenant ajouté avec succès la fonction init(), et conservé l'héritage de la classe mère, et nous sommes prêts à ajouter des fonctionnalités.
Ajouter des propriétés
class Etudiant(Personne): def __init__(self, fname, lname): Personne.__init__(self, fname, lname) self.graduationyear = 2014
Dans l'exemple ci-dessous, l'année 2019 devrait être une variable, et passée dans la classe Etudiant lors de la création des objets étudiants. Pour ce faire, ajoutez un autre paramètre dans la fonction init() :
class Etudiant(Personne): def __init__(self, fname, lname, year): Personne.__init__(self, fname, lname) self.graduationyear = year x = Etudiant("John", "Doeuf", 2014)
Ajouter une méthode appelée bienvenue dans la classe Etudiant :
class Etudiant(Personne): def __init__(self, fname, lname, year): Personne.__init__(self, fname, lname) self.graduationyear = year def welcome(self): print("Bienvenue", self.firstname, self.lastname, "dans la promotion", self.graduationyear)
Si vous ajoutez une méthode dans la classe enfant portant le même nom qu'une fonction dans la classe parent, l'héritage de la méthode parent sera remplacé.