Ejecuta cualquier ejemplo en nuestra consola interactiva: Abrir consola de Python →
Data Classes en Python
Las data classes simplifican la creación de clases que almacenan datos, generando automáticamente métodos como __init__, __repr__, __eq__ y más. En esta guía aprenderás a usar @dataclass, campos personalizados, valores por defecto, ordenación, congelación y técnicas avanzadas.
Tabla de contenidos
- Introducción a dataclasses
- Campos y valores por defecto
- field()
- Ordenación
- Congelación (inmutables)
- Post‑init
- Comparación con NamedTuple
- Ejercicios
- Mini‑proyecto
1. Introducción a dataclasses
from dataclasses import dataclass
@dataclass
class Usuario:
nombre: str
edad: int
u = Usuario("Ana", 30)
print(u)
2. Campos y valores por defecto
from dataclasses import dataclass
@dataclass
class Producto:
nombre: str
precio: float = 0.0
p = Producto("Manzana")
print(p)
3. field()
from dataclasses import dataclass, field
@dataclass
class Carrito:
items: list = field(default_factory=list)
c = Carrito()
c.items.append("Pan")
print(c)
4. Ordenación
from dataclasses import dataclass
@dataclass(order=True)
class Punto:
x: int
y: int
print(Punto(1,2) < Punto(3,1))
5. Congelación (inmutables)
from dataclasses import dataclass
@dataclass(frozen=True)
class Config:
version: str
c = Config("1.0")
# c.version = "2.0" # Error
6. Post‑init
from dataclasses import dataclass
@dataclass
class Rectangulo:
ancho: int
alto: int
area: int = 0
def __post_init__(self):
self.area = self.ancho * self.alto
r = Rectangulo(3, 4)
print(r.area)
7. Comparación con NamedTuple
from typing import NamedTuple
class PuntoNT(NamedTuple):
x: int
y: int
print(PuntoNT(1,2))
8. Ejercicios
- Crea una dataclass para libros.
- Usa default_factory con listas.
- Crea una dataclass ordenable.
- Crea una dataclass inmutable.
- Usa __post_init__ para calcular un valor derivado.
# libro
@dataclass
class Libro:
titulo: str
paginas: int
# ordenable
@dataclass(order=True)
class Item:
precio: float
9. Mini‑proyecto: Sistema de inventario con dataclasses
from dataclasses import dataclass, field
@dataclass
class Producto:
nombre: str
precio: float
stock: int = 0
@dataclass
class Inventario:
productos: list = field(default_factory=list)
def agregar(self, p: Producto):
self.productos.append(p)
def total(self):
return sum(p.precio * p.stock for p in self.productos)
inv = Inventario()
inv.agregar(Producto("Manzana", 1.0, 10))
inv.agregar(Producto("Pan", 0.8, 5))
print(inv.total())