Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Objectgeoriënteerd programmeren (OOP) groepeert data en gedrag samen in een klasse. Een klasse is als een blauwdruk; een object (of instantie) is een concreet exemplaar van die blauwdruk.

In de ML-wereld kom je klassen voortdurend tegen: elke bibliotheek (NumPy, Pandas, Matplotlib) is opgebouwd uit klassen. Begrijpen hoe klassen werken helpt je om bibliotheken correct te gebruiken en eenvoudige eigen hulpklassen te schrijven.

Een klasse definiëren

Een klasse definieer je met het sleutelwoord class. De constructor __init__ wordt aangeroepen telkens wanneer je een nieuw object aanmaakt.

88.5
True
False
Student(name='Alice', avg=88.5)

Instantievariabelen vs. klassevariabelen

Instantievariabelen zijn uniek per object (self.name). Klassevariabelen worden gedeeld door alle objecten van de klasse.

3
a

Overerving

Met overerving (class inheritance) kun je een nieuwe klasse definiëren die de eigenschappen en methoden van een bestaande klasse erft en eventueel uitbreidt. Je ziet dit patroon overal in bibliotheken.

class Child(Parent):
    ...
Rex: Woof!
Whiskers: Meow!
Buddy: Woof!

__str__ vs. __repr__

  • __repr__: bedoeld voor ontwikkelaars — moet duidelijk en unambiguous zijn. Wordt gebruikt in de REPL en bij print() als __str__ niet gedefinieerd is.

  • __str__: bedoeld voor eindgebruikers — mag vriendelijker geformatteerd zijn.

Temperature(celsius=100)
100°C (212.0°F)
100°C (212.0°F)

Een praktisch voorbeeld: Dataset-klasse

Hieronder combineren we alles in een kleine hulpklasse die je zou kunnen gebruiken vóór je Pandas leert.

Dataset: Daily temperatures
  n      = 6
  min    = 9.8
  max    = 18.2
  mean   = 13.58
Dataset(name='Daily temperatures', n=6)

Oefeningen

Oefening 1 — Schrijf een klasse Rectangle met:

  • __init__(self, width, height) — sla breedte en hoogte op als instantievariabelen

  • area() — geeft width * height terug

  • perimeter() — geeft 2 * (width + height) terug

  • __repr__ — bijv. Rectangle(width=5, height=3)

Test: maak twee rechthoeken en vergelijk hun oppervlakten.

Oefening 2 — Breid de klasse Rectangle uit met een subklasse Square waarbij de constructor slechts één argument side aanvaardt en super().__init__() aanroept. Overschrijf __repr__ om Square(side=4) te tonen.

Oefening 3 — Voeg aan de klasse Dataset een methode above_mean() toe die een lijst teruggeeft van alle waarden die strikt groter zijn dan het gemiddelde. Gebruik een list comprehension.

Oefening 4 — Schrijf een klasse ColoredRectangle die erft van Rectangle en een extra parameter color heeft. Voeg een methode description() toe die een zin teruggeeft als "A red rectangle of 5x3 with area 15."