Un decorador en Python es una función que toma otra función y extiende la funcionalidad de esta última función sin explícitamente modificarla. En otras palabras, permite agregar nuevas funcionalidades a una función o método existente, sin cambiar su código fuente.
Se representan mediante el símbolo “@”, seguido del nombre del decorador y se colocan justo encima de la función que se desea decorar.
Por ejemplo, un uso común de los decoradores involucra la programación orientada a aspectos donde separas las preocupaciones de lógica de negocios y lógica no funcional como inyección de dependencias, registro y control de seguridad.
Un ejemplo simple de decorador podría ser:
```python
def mi_decorador(func):
def funcion_envoltura():
print(“Esto se añade al inicio de la función original.”)
func()
print(“Esto se añade al final de la función original.”)
return funcion_envoltura
@mi_decorador
def funcion_original():
print(“Esta es la función original.”)
```
Al llamar a `funcion_original()`, obtendríamos la salida:
```
Esto se añade al inicio de la función original.
Esta es la función original.
Esto se añade al final de la función original.
```
Como puede verse, el decorador ha añadido comportamiento al inicio y al final de la función original, sin modificarla.