Data Classes en Python: gestione datos con sintaxis moderna

Una data class de Python es una clase regular que tiene el decorador @dataclass. Está creada específicamente para contener datos. Desde Python 3.7, Python ofrece data classes a través de un módulo integrado llamado dataclasses. Hay varias ventajas sobre clases regulares que exploraremos. También veremos código de ejemplo y un par de operaciones comunes.
Ventajas de usar data classes
Requiere una cantidad mínima de código
El decorador @dataclass añade mucha funcionalidad a una clase sin añadir código visible. Esto permite que tu data class sea muy compacta mientras ofrece muchas características útiles. Todo lo que necesitas es definir los campos para guardar tus datos. No necesitas definir ninguna función.
Comparación
Dos data classes de Python pueden compararse con == porque el método especial __eq__ se implementa automáticamente. En general, podemos comparar cualquier objeto Python que implemente este método especial con otros objetos del mismo tipo.
Imprimir una data class
De igual forma, como se implementa __repr__, puedes imprimir data classes y obtener una representación bonita. Esto es especialmente útil para depuración.
Las data classes requieren type hints
Las data classes se construyen alrededor del sistema de tipos (relativamente) nuevo que ofrece Python. Usar type hints reduce la probabilidad de bugs y comportamiento inesperado. Básicamente declaras el tipo de dato que debe almacenarse en una variable.
Ejemplo de data class en Python
Aquí tienes un ejemplo de data class en acción:
from dataclasses import dataclass
@dataclass
class Card:
rank: str
suit: str
card1 = Card("Q", "hearts")
card2 = Card("Q", "hearts")
print(card1 == card2) # True
print(card1.rank) # 'Q'
print(card1) # Card(rank='Q', suit='hearts')
Valores por defecto
Una data class puede tener valores por defecto. Asignarlos es tan simple como asignar un valor a una variable. Por ejemplo, para que nuestra clase Card tenga por defecto la Q de corazones:
from dataclasses import dataclass
@dataclass
class Card:
rank: str = 'Q'
suit: str = 'hearts'
Convertir una data class a JSON
Un caso de uso común es convertir tu data class bien estructurada a JSON. P. ej., si quieres exportar datos a una base de datos o enviarlos al navegador. La mala noticia: no hay forma integrada de convertir una data class a JSON.
La buena noticia: hay un paquete llamado dataclasses-json que simplifica la tarea. Requiere un decorador extra. Tendrás que instalar el paquete con pip install o algo como Pipenv, preferiblemente dentro de un entorno virtual. Por ejemplo:
$ pip install dataclasses-json
Aquí tienes un ejemplo de cómo usar el paquete:
from dataclasses import dataclass
from dataclasses_json import dataclass_json
@dataclass_json
@dataclass
class Card:
rank: str = 'Q'
suit: str = 'hearts'
card = Card()
print(card.to_json())
{"rank": "Q", "suit": "hearts"}
Otro método es usar herencia en Python y heredar de JSONEncoder para crear tu propio encoder personalizado. La ventaja es que no necesitas instalar un paquete externo. Puedes aprender cómo hacerlo en este post.
Seguir aprendiendo
- El paquete Python
attrstiene una versión avanzada de la data class nativa - La documentación oficial en Python.org
- Cómo retornar múltiples valores en Python
python
- Consolidación Data Center: Reduciendo Costes, Mejorando Seguridad y Eficiencia
- Dominando la Abstracción de Datos en C++: Simplifica el Diseño con Separación Interfaz-Implementación
- Encapsulamiento de Datos en C++: Protege tu Código
- Dominando tipos de datos en Python: Guía práctica
- Dominando conversión y casting de tipos en Python: Guía completa
- Dominando operadores en Python: Guía completa
- Dominando Excepciones Personalizadas en Python: Guía Práctica
- Dominando la Programación Orientada a Objetos en Python: Clases, Herencia, Encapsulación y Polimorfismo
- Dominando la Herencia en Python: Conceptos, Sintaxis y Ejemplos Prácticos
- Entendiendo type() e isinstance() en Python: ejemplos prácticos
- Estructuras de Datos en Java: Explorando Clases Core y Collections Framework