Saltar a contenido

Decoradores: Modificando el Comportamiento

Un Decorador es una función que recibe otra función como entrada y devuelve una versión "mejorada" o modificada de esa función. Imagina que es como ponerle un "envoltorio" a un regalo: el regalo (la función original) sigue ahí, pero el envoltorio (el decorador) añade estética o funcionalidades extra antes y después de abrirlo.


El Concepto: Funciones de Orden Superior

Para entender los decoradores, primero debemos aceptar tres reglas de Python: 1. Las funciones son objetos: Puedes asignarlas a variables. 2. Funciones dentro de funciones: Puedes definir una función B dentro de una función A. 3. Retorno de funciones: Una función puede devolver otra función como si fuera un dato cualquiera.


¿Cómo se escribe un Decorador?

La sintaxis utiliza el símbolo @ seguido del nombre del decorador justo encima de la función que queremos afectar.

Estructura técnica: Un decorador típico consta de tres partes: 1. La función principal (el decorador). 2. Una función interna (llamada comúnmente wrapper o envoltura). 3. La ejecución de la función original dentro de la envoltura.


Casos de Uso Reales

Los decoradores se utilizan para separar la lógica principal de las tareas secundarias: * Logging: Registrar en una base de datos cada vez que alguien usa una función. * Validación: Comprobar si un usuario tiene permisos (login) antes de dejarlo entrar a una sección. * Cronometraje: Medir cuántos milisegundos tarda una función en procesar datos.

Dato Pro: Los decoradores permiten seguir el principio DRY (Don't Repeat Yourself). En lugar de escribir código de validación en 20 funciones, creas un decorador y lo aplicas a las 20 con una sola línea.


Reto: El Decorador de Seguridad

Vamos a simular un sistema de seguridad. Debes crear un decorador que "proteja" una función, imprimiendo un mensaje de "Verificando acceso..." antes de que la función se ejecute.

Instrucciones: 1. Define una función llamada decorador_seguridad que reciba una funcion. 2. Dentro, define la función envoltura. 3. La envoltura debe imprimir: "Verificando...". 4. Luego, debe ejecutar la funcion() original. 5. El decorador_seguridad debe retornar la envoltura. 6. Aplica el decorador con @decorador_seguridad a la función abrir_puerta que ya está definida en el código de abajo.

# Crea el envoltorio decorador: