Python Academy · Les

Een dataclass definiëren

Gebruik @dataclass om boilerplate te verwijderen.

Les 1 van 413 stappen

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() en astuple() om instanties om te zetten.
  • Je kunt nog steeds methoden toevoegen en dataclasses nesten.
Gratis beginnen

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

  1. Een dataclass definiëren
  2. Standaardwaarden en field()
  3. Opties voor bevriezen en vergelijken
  4. De attrs-bibliotheek
← Terug naar Python Academy