¿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铆 馃憞