Een dataclass definiëren
Gebruik @dataclass om boilerplate te verwijderen.
Een dataclass definiëren is een gratis Python Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Python Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Python Academy bevat in totaal 4 lessen.
Waarom dataclasses?
Wanneer je een klasse schrijft die voornamelijk gegevens bevat, herhaal je al snel dezelfde standaardcode: een __init__, een __repr__ en een __eq__. De module dataclasses genereert dit allemaal voor je op basis van eenvoudige velddeclaraties.
- Minder code om te schrijven en te lezen.
- Minder kans op typefouten in
__init__. - Ingebouwd in de standaardbibliotheek sinds Python 3.7.
De oude aanpak
Hier is een gewone klasse die een punt opslaat. Let erop hoeveel typewerk nodig is om alleen maar twee getallen op te slaan.
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
p = Point(1, 2)
print(p.x, p.y)De decorator @dataclass
Zet @dataclass boven een klasse en declareer velden met typeannotaties. Python genereert __init__ automatisch.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
print(p.x, p.y)Automatische __repr__
Dataclasses maken ook een leesbare __repr__, zodat het afdrukken van het object de velden toont in plaats van een geheugenadres.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
print(Point(3, 4))Automatische __eq__
Twee instanties van een dataclass zijn gelijk wanneer al hun velden gelijk zijn. Je hoeft __eq__ niet zelf te schrijven.
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))Typeannotaties zijn verplicht
Elk veld moet een typeannotatie hebben. De annotatie vertelt het dataclassmechanisme dat de naam een veld is. Een losse toewijzing zonder annotatie wordt een normaal klasseattribuut en geen veld.
from dataclasses import dataclass
@dataclass
class User:
name: str
age: int
u = User('Alice', 30)
print(u)Methoden toevoegen
Een dataclass is nog steeds een normale klasse. Je kunt gewone methoden toevoegen die de gegenereerde velden gebruiken.
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())Velden wijzigen
Instanties van dataclasses zijn standaard veranderlijk, dus je kunt velden na het aanmaken opnieuw toewijzen, net als normale attributen.
from dataclasses import dataclass
@dataclass
class Counter:
value: int
c = Counter(0)
c.value += 5
print(c.value)asdict en astuple
De hulpfuncties asdict() en astuple() zetten een instantie om in een woordenboek of tuple, wat handig is voor serialisatie.
from dataclasses import dataclass, asdict, astuple
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
print(asdict(p))
print(astuple(p))Geneste dataclasses
Een veld van een dataclass kan zelf een andere dataclass zijn. De gegenereerde __repr__ en asdict() doorlopen geneste structuren recursief.
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))Wanneer gebruik je dataclasses?
Kies een dataclass wanneer een klasse voornamelijk gerelateerde waarden bij elkaar brengt.
- Configuratieobjecten.
- Records die door een functie worden geretourneerd.
- Eenvoudige waardetypen zoals coördinaten of geld.
Voor klassen waarin gedrag belangrijker is dan gegevens, kan een gewone klasse duidelijker zijn.
Korte controle
Wat genereert de decorator @dataclass automatisch?
Samenvatting
Je hebt geleerd hoe je @dataclass gebruikt om standaardcode te vermijden.
- Declareer velden met typeannotaties.
__init__,__repr__en__eq__worden gegenereerd.- Gebruik
asdict()enastuple()om instanties om te zetten. - Je kunt nog steeds methoden toevoegen en dataclasses nesten.
Leer Python met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 76
- Lessen
- 320
Veelgestelde vragen
Is de les “Een dataclass definiëren” gratis?
Ja — de volledige tekst van “Een dataclass definiëren” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Python Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Python Academy bevat in totaal 4 lessen.
Wat leer ik in “Een dataclass definiëren”?
Gebruik @dataclass om boilerplate te verwijderen. Je oefent met Python Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Python Academy te beginnen?
Ervaring vooraf is niet nodig. Python Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.
Hoe lang duurt de les “Een dataclass definiëren”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Python Academy?
Ja. Elke les over Python Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Een dataclass definiëren
- Standaardwaarden en field()
- Opties voor bevriezen en vergelijken
- De attrs-bibliotheek