Polymorphisme en Python
Le mot polymorphisme signifie avoir plusieurs formes. En programmation, polymorphisme signifie que le même nom de fonction (mais des signatures différentes) 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. Ceci est particulièrement utile dans les cas où la méthode héritée de la classe mère ne convient pas tout à fait à la classe enfant. Dans ce cas, nous réimplémentons la méthode dans la classe enfant. Ce processus de réimplémentation d'une méthode dans la classe enfant s'appelle une méthode redéfinie.
class Personne: def __init__(self,nom): self.nom=nom def affiche(self): print("je suis une personne") class Etudiant(Personne): def __init__(self,nom,cne): super().__init__(nom) self.cne=cne def affiche(self): print("je suis un etudiant") class Professeur(Personne): def __init__(self,nom,ppr): super().__init__(nom) self.ppr=ppr def affiche(self): print("je suis un professeur") tab=[] etd=Etudiant('Kayouh',123444) tab.append(etd) prf=Professeur('ESSADDOUKI',123123123) tab.append(prf) for obj in tab: obj.affiche()
je suis un etudiant je suis un professeur
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"
class Personne: def __init__(self,nom): self.nom=nom def affiche(self): print("je suis une personne") class Etudiant(Personne): def __init__(self,nom,cne): super().__init__(nom) self.cne=cne def affiche(self): print("je suis un etudiant") class Professeur(Personne): def __init__(self,nom,ppr): super().__init__(nom) self.ppr=ppr def affiche(self): print("je suis un professeur") def ShowMe(obj): obj.affiche() etd=Etudiant('Kayouh',123444) prf=Professeur('ESSADDOUKI',123123123) ShowMe(etd) ShowMe(prf)
je suis un etudiant je suis un professeur