Qu'est-ce que le polymorphisme en Python ?

Le polymorphisme permet à différents objets d'utiliser les mêmes commandes, même s'ils fonctionnent différemment. En Python, le polymorphisme permet d'écrire du code réutilisable et flexible. C'est un concept clé de la programmation orientée objet.

Vous pouvez ainsi appeler la même méthode sur différents objets et chacun réagira à sa manière.

Le polymorphisme par héritage

La manière la plus courante d'utiliser le polymorphisme est avec l'héritage. La classe enfant peut hériter de la classe parent et redéfinir une de ses méthodes pour avoir son propre comportement.

class Animal:
    def faire_du_bruit(self):
        print("L'animal fait un bruit")

class Chien(Animal):
    def faire_du_bruit(self):
        print("Le chien aboie : Ouaf !")

class Chat(Animal):
    def faire_du_bruit(self):
        print("Le chat miaule : Miaou !")

# Créons une liste d'animaux
animaux = [Chien(), Chat(), Animal()]

# On parcourt la liste et on appelle la même méthode faire_du_bruit()
for animal in animaux:
    animal.faire_du_bruit()

# Résultat
# Le chien aboie : Ouaf !
# Le chat miaule : Miaou !
# L'animal fait un bruit
Un instant

Dans cet exemple, nous appelons la même méthode faire_du_bruit() sur chaque objet de la liste animaux, mais le résultat est différent car chaque classe a sa propre implémentation.

Le polymorphisme par Duck Typing

Si ça marche comme un canard, si ça cancane comme un canard, alors c'est probablement un canard.

Traduction : peu importe le type de l'objet, tant qu'il possède la méthode que l'on souhaite utiliser, il n'est pas nécessaire d'hériter d'une même classe.

class Canard:
    def voler(self):
        print("Le canard vole dans le ciel.")


class Avion:
    def voler(self):
        print("L'avion fend les airs.")


def faire_voler(entite_qui_vole):
    entite_qui_vole.voler()


canard = Canard()
avion = Avion()

for elem in [canard, avion]:
    faire_voler(elem)


# Le canard vole dans le ciel.
# L'avion fend les airs.
Un instant

La fonction faire_voler ne se soucie pas de savoir si l'objet est un canard ou un avion. Il faut juste lui passer un objet avec la méthode voler.

Polymorphisme avec les fonctions et opérateurs

On retrouve aussi le polymorphisme avec les fonctions natives et les opérateurs. Ce qui veut dire que l'on utilise le polymorphisme dès le début de son apprentissage, et bien souvent sans le savoir.

Par exemple, l'opérateur + se comporte différemment selon le type des opérandes :

Ce comportement est possible grâce à la méthode __add__() des objets.

# Pour les nombres
resultat_nombres = 5 + 10
print(resultat_nombres)  # 15

# Pour les chaînes de caractères
resultat_chaines = "Bonjour " + "le monde"
print(resultat_chaines)  # "Bonjour le monde"

# Pour les listes
resultat_listes = [1, 2] + [3, 4]
print(resultat_listes)  # [1, 2, 3, 4]
Un instant

Prenons l'exemple de la fonction len(), elle peut-être utilisée sur différents types d'objets car ils implémentent la méthode __len__().

ma_chaine = "Python"
ma_liste = [10, 20, 30]
mon_dico = {"nom": "Dupont", "age": 45}

print(len(ma_chaine))  # 6
print(len(ma_liste))   # 3
print(len(mon_dico))   # 2
Un instant

Le polymorphisme permet donc d'avoir un code :

  • Flexible car les objets de différentes classes sont traités de manière uniforme

  • Extensible car il facile d'ajouter de nouvelles classes sans avoir à modifier le code existant

Bravo, tu es prêt à passer à la suite

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.