Definiera en dataklass
Använd @dataclass för att slippa standardkod.
Definiera en dataklass är en gratis lektion i Python Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Python Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Python Academy innehåller totalt 4 lektioner.
Varför dataclasses?
När ni skriver en klass som huvudsakligen innehåller data upprepar ni ofta samma standardkod: en __init__, en __repr__ och en __eq__. Modulen dataclasses genererar allt detta åt er utifrån enkla fältdeklarationer.
- Mindre kod att skriva och läsa.
- Mindre risk för stavfel i
__init__. - Ingår i standardbiblioteket sedan Python 3.7.
Det gamla sättet
Här är en vanlig klass som lagrar en punkt. Lägg märke till hur mycket kod som krävs bara för att lagra två tal.
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
p = Point(1, 2)
print(p.x, p.y)Dekoratorn @dataclass
Ange @dataclass ovanför en klass och deklarera fält med typannoteringar. Python genererar __init__ automatiskt.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
print(p.x, p.y)Automatisk __repr__
Dataclasses skapar också en läsbar __repr__, så när objektet skrivs ut visas dess fält i stället för en minnesadress.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
print(Point(3, 4))Automatisk __eq__
Två dataclass-instanser jämförs som lika när alla deras fält är lika. Ni behöver inte skriva __eq__ för hand.
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))Typannoteringar krävs
Varje fält måste ha en typannotering. Det är annoteringen som talar om för dataclass-mekanismen att namnet är ett fält. En tilldelning utan annotering blir ett vanligt klassattribut, inte ett fält.
from dataclasses import dataclass
@dataclass
class User:
name: str
age: int
u = User('Alice', 30)
print(u)Lägga till metoder
En dataclass är fortfarande en vanlig klass. Ni kan lägga till vanliga metoder som använder de genererade fälten.
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())Ändra fält
Som standard kan dataclass-instanser ändras, så ni kan tilldela om fält efter att instansen har skapats, precis som vanliga attribut.
from dataclasses import dataclass
@dataclass
class Counter:
value: int
c = Counter(0)
c.value += 5
print(c.value)asdict och astuple
Hjälpfunktionerna asdict() och astuple() omvandlar en instans till en ordbok eller tupel, vilket är praktiskt vid serialisering.
from dataclasses import dataclass, asdict, astuple
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
print(asdict(p))
print(astuple(p))Nästlade dataclasses
Ett dataclass-fält kan själv vara en annan dataclass. Den genererade __repr__ och asdict() går rekursivt igenom nästlade 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 dataclasses bör användas
Använd en dataclass när en klass huvudsakligen grupperar relaterade värden.
- Konfigurationsobjekt.
- Poster som returneras från en funktion.
- Enkla värdetyper som koordinater eller pengar.
För klasser som främst består av beteende snarare än data kan en vanlig klass vara tydligare.
Snabb kontroll
Vad genererar dekoratorn @dataclass automatiskt?
Sammanfattning
Ni har lärt er att använda @dataclass för att ta bort standardkod.
- Deklarera fält med typannoteringar.
__init__,__repr__och__eq__genereras automatiskt.- Använd
asdict()ochastuple()för att omvandla instanser. - Ni kan fortfarande lägga till metoder och nästla dataclasses.
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 76
- Lektioner
- 320
Vanliga frågor
Är lektionen ”Definiera en dataklass” gratis?
Ja – hela texten till ”Definiera en dataklass” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Python Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Python Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Definiera en dataklass”?
Använd @dataclass för att slippa standardkod. Ni övar på Python Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Python Academy?
Du behöver inga förkunskaper. Utbildningen i Python Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Definiera en dataklass”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Python Academy-lektionen?
Ja. Varje Python Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Definiera en dataklass
- Standardvärden och field()
- Alternativ för frysta och jämförbara dataklasser
- Biblioteket attrs