¿Cómo usar import dataclasses en Python?

| Última modificación: 3 de febrero de 2025 | Tiempo de Lectura: 3 minutos

Si alguna vez has escrito clases en Python, sabrás que definir atributos, inicializarlos en el constructor y agregar métodos como repr y eq puede ser repetitivo. Para estos casos podemos usar import dataclasses, un módulo que facilita la creación de clases al eliminar código redundante y mejorar la legibilidad.

En este artículo aprenderás qué es import dataclasses, cómo utilizarlo y cuáles son sus ventajas.

import dataclasses en python

¿Qué son las dataclasses?

Supongamos que debes completar un formulario con tu nombre, dirección y número de teléfono cada vez que realizas un pedido en una tienda online. Sería tedioso escribirlo una y otra vez. Pero ¿qué pasaría si el sistema ya tuviera un formulario prellenado con tus datos y solo necesitaras cambiar lo necesario? Esta es una situación bastante recurrente cuando hacemos compras en línea, nos encontramos con que ponemos nuestro correo y aparecen los indicios de nuestros datos personales, o nos logueamos y ya los datos están cargados.

Las dataclasses en Python funcionan de manera similar: en lugar de escribir una y otra vez los métodos básicos de una clase, import dataclasses lo hace por ti de forma automática.

¿Qué es import dataclasses?

El módulo import dataclasses fue introducido en Python 3.7 y proporciona un decorador llamado dataclass que genera automáticamente métodos especiales en una clase, como:

  • init para inicializar los atributos.
  • repr para representar la clase como una cadena.
  • eq para comparar instancias.
  • Métodos de ordenación lt, le, gt y ge cuando se activan.

Esto permite definir clases de una forma más limpia y directa.

¿Cómo usar import dataclasses en Python?

  • Crear una clase con dataclass: La forma más simple de usar import dataclasses es aplicar el decorador dataclass a una clase:
from dataclasses import dataclass

@dataclass
class Persona:
nombre: str
edad: int

🔴 ¿Quieres Aprender a Programar con Python? 🔴

Descubre el Full Stack Jr. Bootcamp - Aprende a Programar desde Cero de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp Aprende a Programar desde Cero por una semana

Aquí, Python genera automáticamente el método init, por lo que puedes instanciar la clase sin definirlo manualmente:

p = Persona("Juan", 30)
print(p)

Esto imprimirá algo como:

Persona(nombre='Juan', edad=30)
  • Usar valores por defecto: Puedes definir valores por defecto para los atributos de la clase en import dataclasses:
@dataclass
class Persona:
nombre: str
edad: int = 18

Así, si no proporcionas un valor para edad al instanciar la clase, tomará el valor por defecto.

p = Persona("Ana")
print(p) # Persona(nombre='Ana', edad=18)
  • Evitar valores mutables como valores predeterminados: Python recomienda no usar valores mutables como listas o diccionarios directamente como valores predeterminados. Para esto, dataclasses ofrece la función field:
from dataclasses import dataclass, field

@dataclass
class Persona:
nombre: str
hobbies: list = field(default_factory=list)

Sin field, todas las instancias compartirían la misma lista, lo que podría generar errores inesperados.

  • Hacer una dataclass inmutable: Si deseas que los valores de una instancia no puedan modificarse después de su creación, usa el parámetro frozen:
@dataclass(frozen=True)
class Persona:
nombre: str
edad: int

Ahora, si intentas cambiar un atributo, obtendrás un error:

p = Persona("Luis", 25)
p.edad = 30 # Esto generará un error
  • Comparación de objetos con dataclasses: Por defecto, las dataclasses implementan el método eq, lo que permite comparar instancias de manera sencilla:
p1 = Persona("Carlos", 40)
p2 = Persona("Carlos", 40)

print(p1 == p2) # True

Si necesitas que los objetos también se puedan ordenar, debes activar la opción order:

@dataclass(order=True)
class Producto:
nombre: str
precio: float

Ahora se pueden comparar las instancias de la clase basadas en los atributos definidos:

p1 = Producto("Laptop", 1200)
p2 = Producto("Teléfono", 800)

print(p1 > p2) # True, porque 1200 es mayor que 800
  • Conversión de dataclasses a diccionarios: Para convertir una instancia de una dataclass en un diccionario, usa la función asdict:
from dataclasses import asdict

p = Persona("Elena", 35)
print(asdict(p))

Salida:

{'nombre': 'Elena', 'edad': 35}
  • Usar dataclasses para herencia: Puedes crear clases que hereden de otras dataclasses sin problemas:
@dataclass
class Empleado(Persona):
salario: float

Ahora, una instancia de Empleado incluirá los atributos heredados de Persona junto con los nuevos.

e = Empleado("Marcos", 28, 2500.0)
print(e)

Salida:

Empleado(nombre='Marcos', edad=28, salario=2500.0)
import dataclasses en python

Si quieres llevar tus habilidades de programación al siguiente nivel y prepararte para un futuro en tecnología, KeepCoding es el lugar perfecto para hacerlo. Con nuestro Bootcamp de programación inicial aprenderás las habilidades más demandadas del mercado y te convertirás en un profesional altamente cualificado en poco tiempo. No sigas postergando tu transformación, el mundo IT te está esperando.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Aprende a programar desde cero

Full Stack JR. Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado