attrs-biblioteket
Sammenlign attrs med dataclasses
attrs-biblioteket er en gratis Python Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Python Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Python Academy-kurset indeholder 4 lektioner i alt.
Hvad er attrs?
attrs er et tredjepartsbibliotek, der var blandt de første til at bruge idéen om at oprette klasser ud fra felter, flere år før dataclasses kom med i standardbiblioteket. Standardmodulet dataclasses er direkte inspireret af det.
- attrs skal installeres separat:
pip install attrs. - Det tilbyder flere funktioner end dataclasses.
- dataclasses er indbygget og dækker de fleste almindelige behov.
Den moderne attrs-API
Moderne attrs bruger @define og field() fra navnerummet attrs. Opbygningen minder meget om en dataclass.
from attrs import define, field
@define
class Point:
x: int
y: int
p = Point(1, 2)
print(p)Slots som standard
En vigtig forskel er, at klasser med @define automatisk bruger __slots__. Det reducerer hukommelsesforbruget og forhindrer, at du ved et uheld tilføjer attributter, der ikke er erklæret. Almindelige dataclasses bruger en normal __dict__, medmindre du angiver slots=True (Python 3.10+).
Indbyggede validatorer
attrs leveres med færdige validatorer. Et felt kan erklære en validator, der kører under oprettelsen og rejser en fejl, hvis værdien er ugyldig. Dataclasses har ingen indbygget validering; du skriver den selv i __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 TypeErrorKonverteringer
En konverter ændrer inddata, før de gemmes. Du kan for eksempel automatisk konvertere en streng til et heltal. Det er endnu en funktion, som dataclasses mangler.
from attrs import define, field
@define
class Item:
price: int = field(converter=int)
i = Item('42') # stored as the integer 42
print(i.price)Det tilsvarende med dataclasses
Her er den samme idé udtrykt med standardbiblioteket. Validering og konvertering skal skrives manuelt i __post_init__, fordi dataclasses ikke tilbyder kroge pr. felt.
from dataclasses import dataclass
@dataclass
class Item:
price: int
def __post_init__(self):
self.price = int(self.price)
print(Item('42'))asdict i begge
Begge biblioteker tilbyder en hjælpefunktion med navnet asdict. Dataclass-udgaven findes i dataclasses, mens attrs-udgaven findes i attrs. Funktionaliteten er næsten identisk.
from dataclasses import dataclass, asdict
@dataclass
class Point:
x: int
y: int
print(asdict(Point(1, 2)))Frozen i attrs
attrs understøtter også uforanderlighed. Brug @frozen (en genvej til @define(frozen=True)) til skrivebeskyttede instanser, hvilket svarer til @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 FrozenInstanceErrorSammenligning af funktioner
Sådan adskiller de sig:
- dataclasses: standardbibliotek, ingen installation, dækker det grundlæggende.
- attrs: validatorer, konvertere, slots som standard og flere konfigurationsmuligheder.
- Begge genererer
__init__,__repr__og__eq__.
Hvilken skal du bruge?
Vælg dataclasses til simple dataholdere uden en ekstra afhængighed. Vælg attrs, når du har brug for validatorer, konvertere eller de mere omfattende konfigurationsmuligheder og er indstillet på at tilføje en afhængighed. Mange projekter begynder med dataclasses og skifter kun, hvis de vokser fra dem.
En fælles arv
Fordi dataclasses har lånt så meget fra attrs, er det normalt ret mekanisk at skifte mellem dem: udskift importen og dekoratoren, og tilpas validatorer eller konvertere. Hvis du kender den ene, vil den anden straks føles velkendt.
@definesvarer til@dataclass.attrs.fieldsvarer tildataclasses.field.- Validatorer flyttes til
__post_init__, når du skifter til dataclasses.
Hurtigt tjek
Hvilken funktion tilbyder attrs, som standardmodulet dataclasses ikke har indbygget?
Opsummering
Du har sammenlignet attrs med dataclasses.
- attrs inspirerede dataclasses og tilbyder flere funktioner.
- attrs tilføjer validatorer, konvertere og slots som standard.
- dataclasses er indbygget og kræver ingen installation.
- Vælg det enkleste værktøj, der opfylder dine behov.
Lær Python med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 76
- Lektioner
- 320
Ofte stillede spørgsmål
Er lektionen “attrs-biblioteket” gratis?
Ja — hele teksten til “attrs-biblioteket” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Python Academy-kurset, skal du opgradere til CoddyKit PRO. Python Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “attrs-biblioteket”?
Sammenlign attrs med dataclasses Du øver dig i Python Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Python Academy?
Der kræves ingen tidligere erfaring. Python Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “attrs-biblioteket”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Python Academy-lektion?
Ja. Alle Python Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Definér en dataclass
- Standardværdier og field()
- Indstillinger for frozen og sammenligning
- attrs-biblioteket