Un decorador en Python es, efectivamente, una función que modifica otra función. La capacidad de modificar el comportamiento de las funciones existentes sin cambiar su código fuente es una característica poderosa de Python que puede utilizarse para distintos propósitos, desde la mejora de la eficiencia hasta la garantía de la seguridad.
Los decoradores son una característica avanzada y puede ser confusos para los principiantes, pero vale la pena aprender acerca de ellos porque pueden simplificar y mejorar significativamente su código.
Un uso común de los decoradores en Python es para implementar aspectos de programación orientada a aspectos, como la logging (registro de actividad) y la gestión de errores. Por ejemplo, puede definir un decorador que "envuelve" una función con un bloque try...except para manejar cualquier posible excepción lanzada por la función y registrar un mensaje de error, todo ello sin tener que modificar el código original de la función.
Otro uso común de los decoradores es para restringir el acceso a ciertas partes de una aplicación. Por ejemplo, puede definir un decorador que asegure que una función sólo pueda ser ejecutada si el usuario está autenticado.
A nivel alto, un decorador en Python toma una función como entrada y devuelve una nueva función que generalmente amplía o modifica el comportamiento de la función original.
Aquí hay un ejemplo simple de un decorador:
def my_decorator(func):
def wrapper():
print("Antes de la llamada a la función.")
func()
print("Después de la llamada a la función.")
return wrapper
@my_decorator
def say_hello():
print("¡Hola Mundo!")
say_hello()
Cuando ejecuta este código, no sólo verá "¡Hola Mundo!", sino también los mensajes antes y después de la llamada a la funciónsay_hello
. Eso es porque hemos "decorado" say_hello
con my_decorator
.
Los decoradores son una herramienta poderosa en Python. A pesar de su complejidad inicial, pueden ayudar a simplificar su código y hacerlo más robusto y seguro. Asegúrese de utilizarlos donde sea apropiado en sus proyectos de Python.