0Pricing
Python Academy · Lección

Definir una dataclass

Use @dataclass para eliminar código repetitivo

Definir una dataclass es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.

¿Por qué dataclasses?

Cuando escribe una clase que principalmente contiene datos, termina repitiendo el mismo código repetitivo: un __init__, un __repr__ y un __eq__. El módulo dataclasses genera todo eso a partir de simples declaraciones de campos.

  • Menos código que escribir y leer.
  • Menos posibilidades de cometer errores tipográficos en __init__.
  • Incluido en la biblioteca estándar desde Python 3.7.

La forma tradicional

Aquí tiene una clase sencilla que almacena un punto. Observe cuánto código hay que escribir solo para almacenar dos números.

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

p = Point(1, 2)
print(p.x, p.y)

El decorador @dataclass

Aplique @dataclass encima de una clase y declare los campos con anotaciones de tipo. Python genera __init__ automáticamente.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

p = Point(1, 2)
print(p.x, p.y)

__repr__ automático

Las dataclasses también generan un __repr__ legible, de modo que al imprimir el objeto se muestran sus campos en lugar de una dirección de memoria.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

print(Point(3, 4))

__eq__ automático

Dos instancias de dataclass se consideran iguales cuando todos sus campos son iguales. No es necesario escribir __eq__ manualmente.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

print(Point(1, 2) == Point(1, 2))
print(Point(1, 2) == Point(9, 9))

Las anotaciones de tipo son obligatorias

Cada campo debe tener una anotación de tipo. La anotación es lo que indica al mecanismo de dataclasses que ese nombre es un campo. Una asignación sin anotación se convierte en un atributo de clase normal, no en un campo.

from dataclasses import dataclass

@dataclass
class User:
    name: str
    age: int

u = User('Alice', 30)
print(u)

Añadir métodos

Una dataclass sigue siendo una clase normal. Puede añadir métodos convencionales que utilicen los campos generados.

from dataclasses import dataclass

@dataclass
class Rectangle:
    width: int
    height: int

    def area(self):
        return self.width * self.height

r = Rectangle(3, 4)
print(r.area())

Modificar campos

De forma predeterminada, las instancias de dataclass son mutables, por lo que puede reasignar campos después de crearlas, igual que con los atributos normales.

from dataclasses import dataclass

@dataclass
class Counter:
    value: int

c = Counter(0)
c.value += 5
print(c.value)

asdict y astuple

Las funciones auxiliares asdict() y astuple() convierten una instancia en un diccionario o una tupla, algo práctico para la serialización.

from dataclasses import dataclass, asdict, astuple

@dataclass
class Point:
    x: int
    y: int

p = Point(1, 2)
print(asdict(p))
print(astuple(p))

Dataclasses anidadas

Un campo de una dataclass puede ser a su vez otra dataclass. El __repr__ generado y asdict() recorren recursivamente las estructuras anidadas.

from dataclasses import dataclass, asdict

@dataclass
class Address:
    city: str

@dataclass
class Person:
    name: str
    address: Address

p = Person('Bob', Address('Paris'))
print(asdict(p))

Cuándo usar dataclasses

Opte por una dataclass cuando una clase se dedique principalmente a agrupar valores relacionados.

  • Objetos de configuración.
  • Registros devueltos por una función.
  • Tipos de valor sencillos, como coordenadas o dinero.

Para las clases dominadas por el comportamiento y no por los datos, una clase normal puede resultar más clara.

Comprobación rápida

¿Qué genera automáticamente el decorador @dataclass?

Resumen

Ha aprendido a usar @dataclass para eliminar código repetitivo.

  • Declare los campos con anotaciones de tipo.
  • Se generan __init__, __repr__ y __eq__.
  • Use asdict() y astuple() para convertir instancias.
  • También puede añadir métodos y anidar dataclasses.

Preguntas frecuentes

¿La lección «Definir una dataclass» es gratis?

Sí — el texto completo de «Definir una dataclass» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Definir una dataclass»?

Use @dataclass para eliminar código repetitivo Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Python Academy?

No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Definir una dataclass»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Python Academy?

Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Definir una dataclass
  2. Valores predeterminados y field()
  3. Opciones de inmutabilidad y comparación
  4. La biblioteca attrs
← Volver a Python Academy