¿Sigues escribiendo clases simples para almacenar datos y te pasas la mitad del tiempo definiendo métodos repetitivos como __init__, __repr__, y __eq__?
Ese código "boilerplate" (repetitivo) hace que tus clases sean largas, difíciles de leer y propensas a errores si añades un campo nuevo y olvidas actualizar los métodos.
Mira este ejemplo tradicional de una clase Producto:
# ❌ MÉTODO ANTIGUO (Verboso y repetitivo)
class ProductoTradicional:
def __init__(self, nombre: str, precio: float, stock: int):
self.nombre = nombre
self.precio = precio
self.stock = stock
def __repr__(self):
# Necesario para que print() muestre algo útil
return f"Producto(nombre='{self.nombre}', precio={self.precio}, stock={self.stock})"
def __eq__(self, other):
# Necesario para comparar si dos productos son iguales
if not isinstance(other, ProductoTradicional):
return NotImplemented
return (self.nombre, self.precio, self.stock) == (other.nombre, other.precio, other.stock)
p1 = ProductoTradicional("Teclado", 49.99, 10)
print(p1) # Producto(nombre='Teclado', precio=49.99, stock=10)
¡Es demasiado código para algo tan simple! Python 3.7 introdujo la solución perfecta: el decorador @dataclass.
# ✅ CON DATACLASSES (Limpio y Automático ✨)
from dataclasses import dataclass
@dataclass
class ProductoModerno:
nombre: str
precio: float
stock: int
# ¡Python genera automáticamente __init__, __repr__, __eq__ y más!
p2 = ProductoModerno("Teclado", 49.99, 10)
print(p2) # ProductoModerno(nombre='Teclado', precio=49.99, stock=10)
print(p1 == p2) # False (son clases distintas, pero la comparación funciona)
¿Por qué debes usar dataclasses?
Cero Boilerplate: Escribes solo los campos y sus tipos. Python se encarga del resto.
Legibilidad extrema: Tu clase se centra en los datos, no en la implementación de métodos estándar.
Funciones avanzadas gratis: Puedes hacerlas inmutables fácilmente (frozen=True) o añadir ordenación automática (order=True).
¡Deja que Python escriba el código aburrido por ti y céntrate en la lógica de tu aplicación! 🚀🏗️
Más trucos avanzados de Python aquí 👇
