La libreria attrs
Confrontare attrs con le dataclass
La libreria attrs è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Python Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Python Academy include 4 lezioni in totale.
Che cos'è attrs
attrs è una libreria di terze parti che ha introdotto l'idea di creare classi a partire dai campi, anni prima che dataclasses entrasse nella libreria standard. Il modulo standard dataclasses si è ispirato direttamente a essa.
- attrs richiede un'installazione separata:
pip install attrs. - Offre più funzionalità rispetto a dataclasses.
- dataclasses è integrato e copre la maggior parte delle esigenze quotidiane.
L'API moderna di attrs
La versione moderna di attrs utilizza @define e field() dallo spazio dei nomi attrs. La struttura è molto simile a quella di una dataclass.
from attrs import define, field
@define
class Point:
x: int
y: int
p = Point(1, 2)
print(p)Slot per impostazione predefinita
Una differenza importante: le classi @define utilizzano automaticamente __slots__. Questo riduce l'uso della memoria e impedisce di aggiungere accidentalmente attributi non dichiarati. Le dataclass normali usano un normale __dict__, a meno che non si passi slots=True (Python 3.10 o versioni successive).
Validatori integrati
attrs include validatori già pronti. Un campo può dichiarare un validatore che viene eseguito durante la costruzione e solleva un'eccezione se il valore non è valido. Dataclasses non offre alcuna convalida integrata: è necessario scriverla autonomamente in __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 TypeErrorConvertitori
Un convertitore trasforma il valore di input prima che venga memorizzato. Per esempio, può convertire automaticamente una stringa in un int. Questa è un'altra funzionalità che manca a dataclasses.
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'equivalente con dataclasses
Ecco la stessa idea espressa con la libreria standard. La convalida e la conversione vengono aggiunte manualmente in __post_init__, poiché dataclasses non offre hook per singolo campo.
from dataclasses import dataclass
@dataclass
class Item:
price: int
def __post_init__(self):
self.price = int(self.price)
print(Item('42'))asdict in entrambe
Entrambe le librerie forniscono un helper asdict. Quello di dataclasses si trova in dataclasses; quello di attrs si trova in attrs. Il comportamento è quasi identico.
from dataclasses import dataclass, asdict
@dataclass
class Point:
x: int
y: int
print(asdict(Point(1, 2)))Frozen in attrs
attrs supporta anche l'immutabilità. Utilizzi @frozen (una scorciatoia per @define(frozen=True)) per creare istanze in sola lettura, in modo analogo a @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 FrozenInstanceErrorConfronto delle funzionalità
Ecco il confronto:
- dataclasses: libreria standard, nessuna installazione, funzionalità di base.
- attrs: validatori, convertitori, slot per impostazione predefinita e più opzioni di configurazione.
- Entrambe generano
__init__,__repr__e__eq__.
Quale scegliere
Scelga dataclasses per semplici contenitori di dati, senza dipendenze aggiuntive. Scelga attrs quando servono validatori, convertitori o una configurazione più ricca e si è disposti ad aggiungere una dipendenza. Molti progetti iniziano con dataclasses e migrano solo quando le loro esigenze diventano più complesse.
Una base comune
Poiché dataclasses ha ripreso così tanto da attrs, la migrazione tra le due librerie è generalmente meccanica: basta sostituire l'importazione e il decoratore e adattare validatori o convertitori. Conoscere una delle due rende l'altra immediatamente familiare.
@definecorrisponde a@dataclass.attrs.fieldcorrisponde adataclasses.field.- Quando si passa a dataclasses, i validatori vengono spostati in
__post_init__.
Verifica rapida
Quale funzionalità offre attrs che il modulo standard dataclasses non fornisce integrata?
Riepilogo
Ha confrontato attrs con dataclasses.
- attrs ha ispirato dataclasses e offre più funzionalità.
- attrs aggiunge validatori, convertitori e slot per impostazione predefinita.
- dataclasses è integrato e non richiede installazione.
- Scelga lo strumento più semplice che soddisfa le proprie esigenze.
Domande Frequenti
La lezione «La libreria attrs» è gratuita?
Sì — il testo completo di «La libreria attrs» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Python Academy, passa a CoddyKit PRO. Il corso Python Academy include 4 lezioni in totale.
Cosa imparerò in «La libreria attrs»?
Confrontare attrs con le dataclass Eserciti Python Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Python Academy?
Non è richiesta alcuna esperienza precedente. Python Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «La libreria attrs»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Python Academy?
Sì. Ogni lezione Python Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.