Héritage Python
Héritage 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, également appelée classe de base.
La classe enfant est la classe qui hérite d'une autre classe, également appelée classe dérivée.
Créer une classe parent
N'importe quelle classe peut être une classe parente, donc la syntaxe est la même que pour créer n'importe quelle autre classe :
Exemple
Créez une classe nommée Person
, avec
firstname
et lastname
propriétés, et une printname
méthode :
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname,
self.lastname)
#Use the Person class to create an object, and then
execute the printname method:
x = Person("John", "Doe")
x.printname()
Créer une classe enfant
Pour créer une classe qui hérite des fonctionnalités d'une autre classe, envoyez la classe parent en tant que paramètre lors de la création de la classe enfant :
Exemple
Créez une classe nommée Student
, qui héritera des propriétés et des méthodes de la Person
classe :
class Student(Person):
pass
Remarque : Utilisez le mot- pass
clé lorsque vous ne souhaitez pas ajouter d'autres propriétés ou méthodes à la classe.
Maintenant, la classe Student a les mêmes propriétés et méthodes que la classe Person.
Exemple
Utilisez la Student
classe pour créer un objet, puis exécutez la printname
méthode :
x = Student("Mike", "Olsen")
x.printname()
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 __init__()
fonction à la classe enfant (au lieu du mot- pass
clé).
Remarque : La __init__()
fonction est appelée automatiquement chaque fois que la classe est utilisée pour créer un nouvel objet.
Exemple
Ajoutez la __init__()
fonction à la
Student
classe :
class Student(Person):
def __init__(self, fname, lname):
#add properties etc.
Lorsque vous ajoutez la __init__()
fonction, la classe enfant n'héritera plus de la __init__()
fonction parent.
Remarque :__init__()
La
fonction de l'enfant remplace l'héritage de la
__init__()
fonction du parent.
Pour conserver l'héritage de la __init__()
fonction parent, ajoutez un appel à la __init__()
fonction parent :
Exemple
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
Nous avons maintenant ajouté avec succès la fonction __init__() et conservé l'héritage de la classe parente, et nous sommes prêts à ajouter des fonctionnalités dans la
__init__()
fonction.
Utilisez la fonction super()
Python a également une super()
fonction qui fera que la classe enfant hérite de toutes les méthodes et propriétés de son parent :
Exemple
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
En utilisant la super()
fonction, vous n'avez pas besoin d'utiliser le nom de l'élément parent, il héritera automatiquement des méthodes et des propriétés de son parent.
Ajouter des propriétés
Exemple
Ajoutez une propriété appelée graduationyear
à la
Student
classe :
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
self.graduationyear
= 2019
Dans l'exemple ci-dessous, l'année 2019
doit être une variable et transmise à la
Student
classe lors de la création d'objets étudiants. Pour ce faire, ajoutez un autre paramètre dans la fonction __init__() :
Exemple
Ajoutez un year
paramètre, et passez la bonne année lors de la création d'objets :
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear
= year
x = Student("Mike", "Olsen", 2019)
Ajouter des méthodes
Exemple
Ajoutez une méthode appelée welcome
à la
Student
classe :
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear
= year
def welcome(self):
print("Welcome",
self.firstname, self.lastname, "to the class of", self.graduationyear)
Si vous ajoutez une méthode dans la classe enfant avec le même nom qu'une fonction dans la classe parent, l'héritage de la méthode parent sera remplacé.