Polymorphisme Python POO : typage Duck et interfaces
Maîtrisez le polymorphisme en Python. Apprenez à écrire du code flexible et faiblement couplé à l'aide du typage duck, du remplacement de méthode et des classes de base abstraites.
Aperçu
Le polymorphisme est un terme grec signifiant « plusieurs formes ». En programmation orientée objet, cela fait référence à la capacité de différentes classes à répondre au même appel de méthode de leur propre manière. Le polymorphisme vous permet d'écrire une fonction unique capable de traiter de nombreux types d'objets différents, à condition qu'ils partagent une interface commune. Cela permet un faible couplage et rend vos systèmes logiciels hautement adaptables et faciles à étendre.
En Python, le polymorphisme est profondément lié à un concept connu sous le nom de Duck Typing. Le terme vient de la phrase : « S'il marche comme un canard et qu'il cancane comme un canard, alors ce doit être un canard. » En Python typé dynamiquement, une fonction ne se soucie pas de la classe à laquelle appartient un objet ; il se soucie uniquement de savoir si cet objet implémente les méthodes demandées. Par exemple, si vous avez une fonction qui appelle `.speak()`, vous pouvez lui transmettre un chien, un chat ou un robot. Tant qu'ils ont tous une méthode `.speak()`, le code fonctionne parfaitement.
Pour les architectures plus strictes, Python fournit des classes de base abstraites (ABC) via le module `abc` intégré. En héritant de `abc.ABC` et en utilisant le décorateur `@abstractmethod`, vous pouvez définir des interfaces formelles que les classes enfants sont obligées d'implémenter. Si une classe enfant ne parvient pas à définir les méthodes abstraites, Python générera une TypeError lorsque vous tenterez de l'instancier. Équilibrer le typage canard flexible avec des classes abstraites formelles est une compétence clé pour concevoir des bibliothèques Python résilientes.
Sortie de code et d'exécution
Implémentation de classes polymorphes représentant des formes qui calculent leur aire.
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
"""Must be implemented by subclasses."""
pass
class Square(Shape):
def __init__(self, side):
self.side = side
def area(self):
return self.side * self.side
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
import math
return math.pi * (self.radius ** 2)
# Polymorphic function accepting any Shape
def print_area(shape: Shape):
print(f"Calculated Area: {shape.area():.2f}")
print_area(Square(4))
print_area(Circle(3))Calculated Area: 16.00
Calculated Area: 28.27Mise en œuvre étape par étape
- Écriture de processeurs de paiement qui gèrent les objets CreditCard, PayPal et Stripe
- Dessiner divers éléments (texte, image) à l'aide d'une boucle de rendu unifiée
- Se moquer des connexions API externes pendant les tests unitaires
Foire aux questions
Qu’est-ce que le Duck Typing ?
Il s'agit de l'approche dynamique du polymorphisme de Python. Il vérifie la présence de méthodes et de propriétés au moment de l'exécution plutôt que de vérifier l'héritage d'une classe parent spécifique.
Pouvez-vous instancier une classe de base abstraite ?
Non. Toute tentative d'instancier une classe qui hérite d'ABC et contient des méthodes abstraites générera une TypeError.
Sujets connexes
Une introduction complète aux classes Python, aux objets, à l'héritage et aux concepts de POO. Créez des modèles de données robustes et faites évoluer vos applications Python.
Héritage Python POOApprenez l'héritage en Python POO. Maîtrisez les sous-classes, les méthodes de remplacement, l'utilisation de super() et plusieurs modèles d'héritage.
Ressources Python recommandées
Développez vos connaissances avec des didacticiels interactifs, des aide-mémoire et des comparaisons de codes associés.
Comment trier une liste en Python
Apprenez à trier une liste en Python à l'aide de la méthode sort() et de la fonction sorted(). Découvrez des exemples de tri de clés personnalisé et d’ordre inverse.
Aide-mémoire sur les méthodes de chaîne Python
Un guide de référence complet pour la manipulation des chaînes Python. Maîtrisez le formatage, la recherche, le fractionnement, le remplacement et la vérification des propriétés des chaînes.
Python vs JavaScript : quel langage de programmation est le meilleur ?
Une comparaison complète entre Python et JavaScript. Explorez les différences de syntaxe, les performances, les cas d'utilisation (backend et frontend) et des exemples de codage.