Python est langage de développement devenu très populaire dans le développement d’application. Nous allons continuer à avancer en regardant la notion d’héritage sur les objets en python et comment les manipuler.
Précédent tutoriel : #10 – objets, notions avancées
Ce tutoriel est également disponible en vidéo :
Héritage dans les classes
En suivant nos exemples suivant, on peut se dire que les fruits font parti d’une plus grande catégorie aliments. Nous pouvons donc créer une classe Fruit qui héritera de la classe Aliment.
Aliment pourrait contenir les paramètres qui sont communs à tous les aliments et Fruit avoir uniquement les paramètres dédiés au fruit tout en ayant accès aux paramètres définissant un aliment de façon plus global.
Ceci s’écrirait :
class Aliment:
nom = ''
class Fruit(Aliment):
estFruite = ''
Ici nous remontons le paramètre nom à la classe Aliment appelée classe mère et mettons un paramètre estFruite à la classe fille Fruit car ca paramètre n’est pas adapté à tous les aliments existant. Afin de créer cet héritage entre les deux classes, nous passons en paramètre de la classe fille, la classe que nous voulons comme classe mère.
Cela revient à créer un modèle de type :
Aliment -> Fruit -> banane
Aliment -> Fruit -> pomme
Pourquoi pas : Aliment -> Légume -> poireau
On pourrait donc écrire ce programme pour nommer le nom de notre objet qui est général à l’ensemble des éléments :
class Aliment:
nom = ''
class Fruit(Aliment):
estFruite = ''
def __init__ (self, nom, estFruite):
self.nom = nom self.estFruite = estFruite
banane = Fruit('banane', 'oui')
Avec ce concept d’héritage, il sera également possible d’appeler les fonctions de la classe mère sans soucis. Du coup cette fonction sera disponible à partir de toutes les classes filles.
class Aliment:
nom = ''
def afficheNom(self):
print(self.nom)
class Fruit(Aliment):
estFruite = ''
def __init__ (self, nom, estFruite):
self.nom = nom
self.estFruite = estFruite
banane = Fruit('banane', 'oui') banane.afficheNom()
Il est également possible sur surcharger la fonction de la classe en la définissant également dans la classe fille. Si une fonction de même nom est dans la classe mère et la classe fille, alors c’est la fonction de la classe fille qui est appelée.
class Aliment:
nom = ''
def afficheNom(self):
print('Aliment')
class Fruit(Aliment):
estFruite = ''
def __init__ (self, nom, estFruite):
self.nom = nom
self.estFruite = estFruite
def afficheNom(self):
print(self.nom)
banane = Fruit('banane', 'oui') banane.afficheNom()
Ici, c’est bien banane qui s’affichera et non Aliment car la fonction AfficheNom de la classe fille surcharge celle de la classe mère.
Heureusement, le Python a pensé à tout en vous donnant la possibilité d’attendre la fonction de même nom de la classe mère grâce à la fonction super().
Voici un exemple simple :
class Aliment:
nom = ''
def afficheNom(self):
print('Aliment')
class Fruit(Aliment):
estFruite = ''
def __init__ (self, nom, estFruite):
self.nom = nom
self.estFruite = estFruite
def afficheNom(self):
super().afficheNom()
banane = Fruit('banane', 'oui') banane.afficheNom()
Héritage multiple
En Python, il est possible d’hériter de plusieurs classes et pas seulement d’une seule. Nous n’allons pas aller plus loin pout le moment mais voici un exemple de notre classe Fruit qui hérite de Aliment mais à présent également de Manger.
class Aliment:
nom = ''
def afficheNom(self):
print('Aliment')
class Manger:
action = 'manger'
class Fruit(Aliment, Manger):
estFruite = ''
def __init__ (self, nom, estFruite):
self.nom = nom
self.estFruite = estFruite
def afficheNom(self):
super().afficheNom()
banane = Fruit('banane', 'oui') banane.afficheNom()
Conclusion
Nous avons vu de nouvelles notions utiles sur les objets en Python qui sont indispensables à connaitre pour faire des programmes de qualité. Nous irons plus loin dès le prochain chapitre dans notre apprentissage sur le python qui proposent encore de nombreux secrets.
Chapitre suivant : #12 – Classes abstraites
Soyez le premier à commenter