Python: Decoradores explicados con ejemplos prácticos

Entiende qué son los decoradores en Python y cómo pueden hacer tu código más limpio y reutilizable

CodeCraft Master
17 de febrero de 2026
13 min
5342 views

Python: Decoradores explicados con ejemplos prácticos

Los decoradores son una característica poderosa de Python que te permite modificar el comportamiento de funciones o clases de manera elegante.

¿Qué es un decorador?

Un decorador es una función que toma otra función y extiende su comportamiento sin modificarla explícitamente.

def mi_decorador(func):
    def wrapper():
        print("Antes de la función")
        func()
        print("Después de la función")
    return wrapper

@mi_decorador
def saludar():
    print("¡Hola!")

saludar()
# Salida:
# Antes de la función
# ¡Hola!
# Después de la función

Decoradores con argumentos

def decorador_con_args(func):
    def wrapper(*args, **kwargs):
        print(f"Argumentos: {args}, {kwargs}")
        resultado = func(*args, **kwargs)
        print(f"Resultado: {resultado}")
        return resultado
    return wrapper

@decorador_con_args
def sumar(a, b):
    return a + b

sumar(5, 3)
# Salida:
# Argumentos: (5, 3), {}
# Resultado: 8

Ejemplo práctico: Timer

import time
from functools import wraps

def timer(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        inicio = time.time()
        resultado = func(*args, **kwargs)
        fin = time.time()
        print(f"{func.__name__} tardó {fin - inicio:.4f} segundos")
        return resultado
    return wrapper

@timer
def proceso_lento():
    time.sleep(2)
    return "Completado"

proceso_lento()
# proceso_lento tardó 2.0021 segundos

Decorador de caché

from functools import lru_cache

@lru_cache(maxsize=128)
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(100))  # Muy rápido gracias al caché

Decorador para validación

def validar_positivo(func):
    def wrapper(numero):
        if numero < 0:
            raise ValueError("El número debe ser positivo")
        return func(numero)
    return wrapper

@validar_positivo
def raiz_cuadrada(n):
    return n ** 0.5

print(raiz_cuadrada(16))  # 4.0
# raiz_cuadrada(-4)  # ValueError

Decoradores con parámetros

def repetir(veces):
    def decorador(func):
        def wrapper(*args, **kwargs):
            for _ in range(veces):
                resultado = func(*args, **kwargs)
            return resultado
        return wrapper
    return decorador

@repetir(veces=3)
def mensaje():
    print("Hola Mundo")

mensaje()
# Hola Mundo
# Hola Mundo
# Hola Mundo

Decoradores de clase

def singleton(clase):
    instancias = {}
    def get_instancia(*args, **kwargs):
        if clase not in instancias:
            instancias[clase] = clase(*args, **kwargs)
        return instancias[clase]
    return get_instancia

@singleton
class Database:
    def __init__(self):
        print("Conectando a la base de datos")

db1 = Database()  # Conectando a la base de datos
db2 = Database()  # No imprime nada, usa la misma instancia
print(db1 is db2)  # True

Conclusión

Los decoradores son una herramienta esencial en Python. Te permiten escribir código más limpio, modular y reutilizable, siguiendo el principio DRY (Don't Repeat Yourself).

C

CodeCraft Master

Desarrollador Full Stack apasionado por compartir conocimiento. Escribo sobre JavaScript, TypeScript, React y desarrollo web moderno.

Artículos Relacionados

Únete a nuestro boletín

Recibe contenido exclusivo de desarrollo web directamente en tu bandeja de entrada.

  • Contenido exclusivo de desarrollo web

  • Actualizaciones semanales

  • Tips y trucos

  • Sin spam, solo contenido de calidad

Al suscribirte, aceptas recibir correos electrónicos. Puedes cancelar tu suscripción en cualquier momento.