Definér en dataclass
Brug @dataclass til at fjerne boilerplate-kode.
Definér en dataclass er en gratis Python Academy-lektion på CoddyKit. Dette er lektion 1 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.
Hvorfor dataclasses?
Når du skriver en klasse, der primært indeholder data, ender du med at gentage den samme standardkode: en __init__, en __repr__ og en __eq__. Modulet dataclasses genererer det hele for dig ud fra enkle feltdeklarationer.
- Mindre kode at skrive og læse.
- Færre muligheder for tastefejl i
__init__. - Indbygget i standardbiblioteket siden Python 3.7.
Den gamle måde
Her er en almindelig klasse, der gemmer et punkt. Bemærk, hvor meget kode du skal skrive for blot at gemme to tal.
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
p = Point(1, 2)
print(p.x, p.y)Dekoratoren @dataclass
Anvend @dataclass over en klasse, og deklarér felter med typeannoteringer. Python genererer automatisk __init__.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
print(p.x, p.y)Automatisk __repr__
Dataclasses opbygger også en læsbar __repr__, så udskrivning af objektet viser dets felter i stedet for en hukommelsesadresse.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
print(Point(3, 4))Automatisk __eq__
To dataclass-instanser er ens, når alle deres felter er ens. Du behøver ikke skrive __eq__ manuelt.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
print(Point(1, 2) == Point(1, 2))
print(Point(1, 2) == Point(9, 9))Typeannoteringer er obligatoriske
Hvert felt skal have en typeannotering. Det er annoteringen, der fortæller dataclass-mekanismen, at navnet er et felt. En bar tildeling uden annotering bliver en almindelig klasseattribut, ikke et felt.
from dataclasses import dataclass
@dataclass
class User:
name: str
age: int
u = User('Alice', 30)
print(u)Tilføjelse af metoder
En dataclass er stadig en almindelig klasse. Du kan tilføje almindelige metoder, der bruger de genererede felter.
from dataclasses import dataclass
@dataclass
class Rectangle:
width: int
height: int
def area(self):
return self.width * self.height
r = Rectangle(3, 4)
print(r.area())Ændring af felter
Som standard kan dataclass-instanser ændres, så du kan tildele felter igen efter oprettelsen ligesom normale attributter.
from dataclasses import dataclass
@dataclass
class Counter:
value: int
c = Counter(0)
c.value += 5
print(c.value)asdict og astuple
Hjælpefunktionerne asdict() og astuple() konverterer en instans til en ordbog eller tupel, hvilket er praktisk til serialisering.
from dataclasses import dataclass, asdict, astuple
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
print(asdict(p))
print(astuple(p))Indlejrede dataclasses
Et dataclass-felt kan selv være en anden dataclass. Den genererede __repr__ og asdict() går rekursivt ned i indlejrede strukturer.
from dataclasses import dataclass, asdict
@dataclass
class Address:
city: str
@dataclass
class Person:
name: str
address: Address
p = Person('Bob', Address('Paris'))
print(asdict(p))Hvornår skal du bruge dataclasses?
Vælg en dataclass, når en klasse primært samler relaterede værdier.
- Konfigurationsobjekter.
- Poster, som en funktion returnerer.
- Enkle værdityper som koordinater eller penge.
For klasser, hvor adfærd fylder mere end data, kan en almindelig klasse være lettere at læse.
Hurtigt tjek
Hvad genererer dekoratoren @dataclass automatisk?
Opsummering
Du har lært at bruge @dataclass til at fjerne standardkode.
- Deklarér felter med typeannoteringer.
__init__,__repr__og__eq__genereres automatisk.- Brug
asdict()ogastuple()til at konvertere instanser. - Du kan stadig tilføje metoder og indlejre dataclasses.
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 “Definér en dataclass” gratis?
Ja — hele teksten til “Definér en dataclass” 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 “Definér en dataclass”?
Brug @dataclass til at fjerne boilerplate-kode. 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 1 af 4.
Hvor lang tid tager lektionen “Definér en dataclass”?
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