CodeForge

Python de Cero a Experto / POO

Dataclasses y protocolos

Teoría22 min20 XP

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.