Escribir __init__, __repr__ y __eq__ a mano para cada clase de datos es tedioso y repetitivo. Las
DATACLASSES los generan por ti con una sola línea: @dataclass. Y los PROTOCOLS traen a Python el "duck
typing" tipado —definir qué debe TENER un objeto, sin importar de qué clase sea—, primo directo del tipado
estructural que dominaste en TypeScript. Hoy cierras la POO con dos herramientas modernas que hacen tu
código más limpio y flexible.
La fábrica de fichas automática
Dataclasses: menos código repetitivo
Con @dataclass sobre la clase y los campos declarados con sus TIPOS (nombre: str), Python genera
automáticamente __init__ (para crear objetos), __repr__ (para imprimirlos bien) y __eq__ (para
compararlos por contenido) —todo lo que antes escribías a mano—. Los campos pueden tener valores por defecto
(categoria: str = "otros"). Es la forma moderna y recomendada de crear clases que principalmente GUARDAN
datos: menos código, menos errores, misma funcionalidad. Puedes seguir agregando métodos propios como en
cualquier clase.
Duck typing y protocolos
¿Qué genera @dataclass y qué es un Protocol?
Mini-reto
Moderniza Mi Bolsillo: 1) convierte tu clase Gasto en una @dataclass con campos nombre: str,
valor: int y categoria: str = "otros", y comprueba que print y == funcionan solos; 2) crea una lista
de gastos como dataclasses y suma sus valores con una comprehension; 3) (en papel o probándolo) piensa en una
función total(items) que acepte tanto Gasto como cualquier objeto con .valor —el duck typing en
acción—. Nota cuánto código te ahorró @dataclass.
Qué sigue
¡Módulo 4 casi cerrado! Dominas la POO en Python: clases, atributos, herencia, dunder methods, properties,
dataclasses y protocols. Ya modelas el mundo con objetos. El reto del módulo junta todo en un modelo completo
de Mi Bolsillo con clases. Después, el módulo 5 traerá el Python INTERMEDIO —excepciones, archivos, context
managers— para escribir programas robustos que interactúan con el mundo real.