Classes de données Python : simplifier la gestion de données avec syntaxe moderne

Une classe de données Python est une classe régulière avec décorateur @dataclass. Créée spécifiquement pour stocker des données. Depuis Python 3.7, module built-in dataclasses. Plusieurs avantages sur classes régulières qu'on explore ici. Exemples code et opérations courantes.
Avantages des classes de données
Pourquoi dataclass au lieu classe régulière ? Avantages :
Code minimal requis
Le décorateur @dataclass ajoute beaucoup fonctionnalités sans code visible. Dataclass compacte mais riche. Il suffit de déclarer champs pour données. Pas besoin de définir fonctions.
Comparaison
Deux dataclasses comparables avec == car méthode dunder __eq__ implémentée auto. En général, tout objet Python implémentant cette méthode spéciale comparable à autres objets même type.
Affichage dataclass
Comme __repr__ implémenté, print donne belle représentation. Utile pour débogage.
Dataclasses exigent type hints
Dataclasses construites autour système types Python. Type hints réduisent bugs/comportements inattendus. Vous déclarez type données stockées dans variable.
Exemple classe de données Python
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')
Valeurs par défaut
Dataclass peut avoir valeurs par défaut. Assignation simple comme variable. Pour faire Card = Dame de cœur par défaut :
from dataclasses import dataclass
@dataclass
class Card:
rank: str = 'Q'
suit: str = 'hearts'
Convertir une dataclass en JSON
Cas courant : exporter dataclass structurée vers JSON. Ex: envoi BDD ou navigateur. Mauvaise nouvelle : pas de conversion built-in dataclass → JSON.
Bonne nouvelle : package dataclasses-json simplifie. Nécessite décorateur extra. Installation via pip/Pipenv, idéalement dans venv :
$ pip install dataclasses-json
Exemple utilisation :
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"}
Autre méthode : héritage Python + hériter JSONEncoder pour encoder custom. Avantage : pas package externe. Apprenez comment dans cet article.
Continuer à apprendre
- Package Python Attrs : version avancée dataclasses natives
- Doc officielle Python.org
- Comment retourner plusieurs valeurs en Python
Python
- Maîtriser les types de données Python : Guide pratique
- Maîtriser la conversion et le transtypage de types en Python : Guide complet
- Maîtriser les opérateurs Python : Guide complet
- Maîtriser les exceptions personnalisées Python : guide pratique
- Maîtriser la programmation orientée objet Python : classes, héritage, encapsulation et polymorphisme
- Maîtriser l'héritage Python : concepts, syntaxe et exemples pratiques
- Consolidation des data centers : réduire les coûts, renforcer la sécurité, booster l'efficacité
- Comprendre type() et isinstance() en Python : exemples pratiques
- Structures de données Java : Exploration des classes de base et Collections Framework