Definere en dataklasse
Bruk @dataclass for å fjerne standardkode.
Definere en dataklasse er en gratis leksjon i Python Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Python Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Python Academy inneholder totalt 4 leksjoner.
Hvorfor dataklasser?
Når De skriver en klasse som hovedsakelig inneholder data, ender De opp med å gjenta den samme standardkoden: en __init__, en __repr__ og en __eq__. Modulen dataclasses genererer alt dette for Dem ut fra enkle felterklæringer.
- Mindre kode å skrive og lese.
- Færre muligheter for skrivefeil i
__init__. - Innebygd i standardbiblioteket siden Python 3.7.
Den gamle måten
Her er en vanlig klasse som lagrer et punkt. Legg merke til hvor mye kode som må skrives bare for å lagre to tall.
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
p = Point(1, 2)
print(p.x, p.y)@dataclass-dekoratoren
Bruk @dataclass over en klasse, og erklær felter med typeannotasjoner. Python genererer __init__ automatisk.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
print(p.x, p.y)Automatisk __repr__
Dataklasser bygger også en lesbar __repr__, slik at utskrift av objektet viser feltene i stedet for en minneadresse.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
print(Point(3, 4))Automatisk __eq__
To instanser av en dataklasse sammenlignes som like når alle feltene deres er like. De trenger 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))Typeannotasjoner er obligatoriske
Hvert felt må ha en typeannotasjon. Det er annotasjonen som forteller dataklassemotoren at navnet er et felt. En tilordning uten annotasjon blir et vanlig klasseattributt, ikke et felt.
from dataclasses import dataclass
@dataclass
class User:
name: str
age: int
u = User('Alice', 30)
print(u)Legge til metoder
En dataklasse er fortsatt en vanlig klasse. De kan legge til vanlige metoder som bruker de genererte feltene.
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())Endre felter
Som standard er instanser av dataklasser muterbare, slik at De kan tilordne felter på nytt etter opprettelsen, akkurat som vanlige attributter.
from dataclasses import dataclass
@dataclass
class Counter:
value: int
c = Counter(0)
c.value += 5
print(c.value)asdict og astuple
Hjelpefunksjonene asdict() og astuple() konverterer en instans til en ordbok eller tupel, noe som er praktisk ved serialisering.
from dataclasses import dataclass, asdict, astuple
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
print(asdict(p))
print(astuple(p))Nestede dataklasser
Et felt i en dataklasse kan selv være en annen dataklasse. Den genererte __repr__-metoden og asdict() går rekursivt inn i nestede 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))Når bør De bruke dataklasser?
Velg en dataklasse når en klasse hovedsakelig samler relaterte verdier.
- Konfigurasjonsobjekter.
- Poster som returneres fra en funksjon.
- Enkle verdityper, som koordinater eller penger.
For klasser som hovedsakelig består av atferd fremfor data, kan en vanlig klasse være enklere å lese.
Kort kontroll
Hva genererer dekoratoren @dataclass automatisk?
Oppsummering
De har lært å bruke @dataclass for å fjerne standardkode.
- Erklær felter med typeannotasjoner.
__init__,__repr__og__eq__genereres automatisk.- Bruk
asdict()ogastuple()til å konvertere instanser. - De kan fortsatt legge til metoder og bygge inn nestede dataklasser.
Lær deg Python med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 76
- Leksjoner
- 320
Ofte stilte spørsmål
Er leksjonen «Definere en dataklasse» gratis?
Ja – hele teksten i «Definere en dataklasse» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Python Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Python Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Definere en dataklasse»?
Bruk @dataclass for å fjerne standardkode. Du øver på Python Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Python Academy?
Ingen tidligere erfaring er nødvendig. Python Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Definere en dataklasse»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Python Academy-leksjonen?
Ja. Alle Python Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Definere en dataklasse
- Standardverdier og field()
- Alternativer for frosne og sammenlignbare dataklasser
- attrs-biblioteket