La bibliothèque attrs
Comparer attrs et dataclasses
La bibliothèque attrs est une leçon Python Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Python Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Python Academy comprend 4 leçons au total.
Qu'est-ce qu'attrs ?
attrs est une bibliothèque tierce qui a été la première à proposer l'idée de créer une classe à partir de champs, plusieurs années avant l'arrivée de dataclasses dans la bibliothèque standard. Le module standard dataclasses s'en est directement inspiré.
- attrs s'installe séparément :
pip install attrs. - Cette bibliothèque offre davantage de fonctionnalités que dataclasses.
- dataclasses est intégré et couvre la plupart des besoins courants.
L'API attrs moderne
La version moderne d'attrs utilise @define et field() depuis l'espace de noms attrs. Sa structure est très similaire à celle d'une classe de données.
from attrs import define, field
@define
class Point:
x: int
y: int
p = Point(1, 2)
print(p)Emplacements par défaut
Une différence importante : les classes @define utilisent automatiquement __slots__. Cela réduit l'utilisation de la mémoire et empêche l'ajout accidentel d'attributs non déclarés. Les classes de données classiques utilisent un __dict__ normal, sauf si vous transmettez slots=True (Python 3.10 ou version ultérieure).
Validateurs intégrés
attrs fournit des validateurs prêts à l'emploi. Un champ peut déclarer un validateur qui s'exécute lors de la construction et lève une exception si la valeur n'est pas valide. Les classes de données n'intègrent aucune validation : vous devez l'écrire vous-même dans __post_init__.
from attrs import define, field
from attrs.validators import instance_of
@define
class User:
age: int = field(validator=instance_of(int))
User(30) # ok
User('oops') # raises TypeErrorConvertisseurs
Un convertisseur transforme la valeur d'entrée avant son stockage. Vous pouvez, par exemple, convertir automatiquement une chaîne en entier. C'est une autre fonctionnalité absente des classes de données.
from attrs import define, field
@define
class Item:
price: int = field(converter=int)
i = Item('42') # stored as the integer 42
print(i.price)L'équivalent avec une classe de données
Voici la même idée exprimée avec la bibliothèque standard. La validation et la conversion sont écrites manuellement dans __post_init__, car les classes de données ne proposent pas de mécanismes propres à chaque champ.
from dataclasses import dataclass
@dataclass
class Item:
price: int
def __post_init__(self):
self.price = int(self.price)
print(Item('42'))asdict dans les deux bibliothèques
Les deux bibliothèques fournissent une fonction utilitaire asdict. Celle des classes de données se trouve dans dataclasses ; celle d'attrs se trouve dans attrs. Leur comportement est presque identique.
from dataclasses import dataclass, asdict
@dataclass
class Point:
x: int
y: int
print(asdict(Point(1, 2)))Immutabilité avec attrs
attrs prend également en charge l'immuabilité. Utilisez @frozen (raccourci de @define(frozen=True)) pour obtenir des instances en lecture seule, comme avec @dataclass(frozen=True).
from attrs import frozen
@frozen
class Point:
x: int
y: int
p = Point(1, 2)
print(p)
# p.x = 9 would raise FrozenInstanceErrorComparaison des fonctionnalités
Voici leurs principales différences :
- dataclasses : bibliothèque standard, aucune installation, fonctionnalités de base.
- attrs : validateurs, convertisseurs, emplacements par défaut et configuration plus riche.
- Les deux génèrent
__init__,__repr__et__eq__.
Laquelle choisir ?
Choisissez dataclasses pour de simples conteneurs de données sans dépendance supplémentaire. Choisissez attrs si vous avez besoin de validateurs, de convertisseurs ou de sa configuration plus riche, et que l'ajout d'une dépendance ne vous pose pas problème. De nombreux projets commencent avec dataclasses et ne migrent que si cette solution ne suffit plus.
Une histoire commune
Comme les classes de données ont beaucoup emprunté à attrs, passer de l'une à l'autre est généralement mécanique : remplacez l'importation et le décorateur, puis adaptez les validateurs ou les convertisseurs. La connaissance de l'une rend l'autre immédiatement familière.
@definecorrespond à@dataclass.attrs.fieldcorrespond àdataclasses.field.- Lors du passage aux classes de données, déplacez les validateurs dans
__post_init__.
Vérification rapide
Quelle fonctionnalité attrs propose-t-elle alors que le module standard dataclasses ne l'intègre pas ?
Récapitulatif
Vous avez comparé attrs et dataclasses.
- attrs a inspiré dataclasses et offre davantage de fonctionnalités.
- attrs ajoute des validateurs, des convertisseurs et des emplacements par défaut.
- dataclasses est intégré et ne nécessite aucune installation.
- Choisissez l'outil le plus simple qui répond à vos besoins.
Questions Fréquemment Posées
La leçon « La bibliothèque attrs » est-elle gratuite ?
Oui — le texte complet de « La bibliothèque attrs » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Python Academy, passe à CoddyKit PRO. Le cours Python Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « La bibliothèque attrs » ?
Comparer attrs et dataclasses Tu pratiques Python Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Python Academy ?
Aucune expérience préalable n'est requise. Python Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « La bibliothèque attrs » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Python Academy ?
Oui. Chaque leçon Python Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Définir une classe de données
- Valeurs par défaut et field()
- Options d'immutabilité et de comparaison
- La bibliothèque attrs