


Comprender los decoradores en Python
Los decoradores son un patrón de diseño que le permite modificar o ampliar el comportamiento de un objeto sin cambiar la implementación original del objeto. En otras palabras, los decoradores le permiten agregar nueva funcionalidad a un objeto existente sin modificar su código principal. Un decorador suele ser una función que toma un objeto como argumento y devuelve un nuevo objeto que "envuelve" el objeto original. El nuevo objeto tiene los mismos métodos y atributos que el objeto original, pero también tiene alguna funcionalidad o comportamiento adicional proporcionado por el decorador. Por ejemplo, digamos que tiene una clase llamada `Car` que tiene un método llamado `drive ()` que hace que el auto se mueva. Podrías crear un decorador llamado `SpeedLimitDecorator` que modifique el método `drive()` para limitar la velocidad del automóvil. El `SpeedLimitDecorator` tomaría el objeto `Car` original como argumento y devolvería un nuevo objeto `Car` que tiene los mismos métodos y atributos que el `Car` original, pero con la funcionalidad adicional de limitar la velocidad.
Aquí hay un ejemplo de cómo podría utilizar un decorador en Python:
```
class Car:
def drive(self):
print("El auto está conduciendo")
class SpeedLimitDecorator:
def __init__(self, car):
self. car = car
def drive(self):
self.car.drive()
print("El auto ahora está limitado a 50 mph")
car = Car()
speed_limited_car = SpeedLimitDecorator(car)
speed_limited_car.drive() # impresiones "El automóvil está conduciendo" y "El automóvil ahora está limitado a 50 mph"
```
En este ejemplo, la clase `SpeedLimitDecorator` toma un objeto `Car` como argumento en su constructor y luego modifica el `drive( )` método del objeto `Car` original para limitar su velocidad. La clase `SpeedLimitDecorator` también tiene su propio método `drive()` que llama al método `drive()` original del objeto envuelto, pero con la limitación adicional de 50 mph. Los decoradores son una poderosa herramienta para modificar o ampliar objetos existentes. sin cambiar su implementación original. Se pueden usar para agregar nuevas funciones, modificar el comportamiento o incluso reemplazar partes de la implementación de un objeto sin afectar el resto del código.



