


Comprendre les décorateurs en Python
Les décorateurs sont un modèle de conception qui vous permet de modifier ou d'étendre le comportement d'un objet sans changer l'implémentation originale de l'objet. En d'autres termes, les décorateurs vous permettent d'ajouter de nouvelles fonctionnalités à un objet existant sans modifier son code principal.
Un décorateur est généralement une fonction qui prend un objet comme argument et renvoie un nouvel objet qui « enveloppe » l'objet d'origine. Le nouvel objet a les mêmes méthodes et attributs que l'objet d'origine, mais il a également des fonctionnalités ou un comportement supplémentaires fournis par le décorateur.
Par exemple, disons que vous avez une classe appelée « Car » qui a une méthode appelée « drive ». ()` qui fait bouger la voiture. Vous pouvez créer un décorateur appelé « SpeedLimitDecorator » qui modifie la méthode « drive() » pour limiter la vitesse de la voiture. Le `SpeedLimitDecorator` prendrait l'objet `Car` d'origine comme argument et renverrait un nouvel objet `Car` qui a les mêmes méthodes et attributs que la `Car` d'origine, mais avec la fonctionnalité supplémentaire de limiter la vitesse.
Voici un exemple de la façon dont vous pourriez utiliser un décorateur en Python :
```
class Car:
def drive(self):
print("La voiture roule")
class SpeedLimitDecorator:
def __init__(self, car):
self. car = car
def drive(self):
self.car.drive()
print("La voiture est maintenant limitée à 50 mph")
car = Car()
speed_limited_car = SpeedLimitDecorator(car)
speed_limited_car.drive() # prints "La voiture roule" et "La voiture est maintenant limitée à 50 mph"
```
Dans cet exemple, la classe `SpeedLimitDecorator` prend un objet `Car` comme argument dans son constructeur, puis modifie le `drive( )` de l’objet `Car` d’origine pour limiter sa vitesse. La classe `SpeedLimitDecorator` possède également sa propre méthode `drive()` qui appelle la méthode `drive()` d'origine de l'objet encapsulé, mais avec la limitation supplémentaire de 50 mph.
Les décorateurs sont un outil puissant pour modifier ou étendre des objets existants. sans changer leur implémentation originale. Ils peuvent être utilisés pour ajouter de nouvelles fonctionnalités, modifier le comportement ou même remplacer des parties de l'implémentation d'un objet sans affecter le reste du code.



