Las dataclases en Python son una forma más elegante y eficiente de crear clases que principalmente almacenan datos. Este tipo de clases facilitan la lectura y escritura del código, y también generan automáticamente métodos comunes como __init__, __repr__ y __eq__ entre otros.

Importación y uso básico

Primero, es necesario importar dataclass desde el módulo dataclasses.

from dataclasses import dataclass

Luego, puedes usar el decorador @dataclass para crear una clase que almacenará datos.

@dataclass
class Punto:
    x: int
    y: int

¿Qué son los decoradores?

un decorador es una función que toma otra función como argumento y extiende su comportamiento, devolviendo una nueva función que generalmente envuelve la función original. Puedes usar el símbolo @ seguido del nombre del decorador para aplicarlo a una función.

Métodos generados automáticamente

Por defecto, las dataclases generan automáticamente los métodos __init__, __repr__ y __eq__.

p = Punto(2, 3)
print(p)  # Output: Punto(x=2, y=3)

Inmutabilidad

Puedes hacer que los campos sean inmutables usando el parámetro frozen=True.

@dataclass(frozen=True)
class PuntoInmutable:
    x: int
    y: int

Valores predeterminados

También puedes asignar valores predeterminados a los campos.

@dataclass
class PuntoConDefaults:
    x: int = 0
    y: int = 0

Tipos compuestos

Las dataclases también pueden contener tipos compuestos como listas o diccionarios.

@dataclass
class Poligono:
    vertices: list[Punto]

Comparación de objetos

Las dataclases generan automáticamente el método __eq__, lo que facilita la comparación de objetos.

p1 = Punto(1, 2)
p2 = Punto(1, 2)
print(p1 == p2)  # Output: True

Ordenamiento

Si deseas que los objetos sean ordenables, puedes usar el parámetro order=True.

@dataclass(order=True)
class PuntoOrdenable:
    x: int
    y: int