Classes

Classes vormen de kern van objectgeoriënteerd programmeren in Python. Ze bieden een manier om gegevens en functies samen te voegen in één enkel object. Dit hoofdstuk legt uit wat classes zijn, hoe je ze kunt gebruiken om objecten (instanties van classes) te maken, en hoe je functies binnen een class definieert die gebruik maken van de gegevens die bij die objecten horen.

Wat is een Class?

Een class is een blauwdruk of sjabloon voor het maken van objecten. Objecten zijn specifieke exemplaren van die class en bevatten zowel gegevens (attributen) als functies (methoden) die die gegevens kunnen gebruiken.

1. Een Class Schrijven met de __init__ Methode

Laten we beginnen met het maken van een eenvoudige class genaamd Persoon. Deze class zal gegevens bevatten over een persoon, zoals hun naam en leeftijd.

Voorbeeld:

class Persoon:
    def __init__(self, naam, leeftijd):
        self.naam = naam  # Attribuut 'naam'
        self.leeftijd = leeftijd  # Attribuut 'leeftijd'

Uitleg:

  • class Persoon:: Dit is de definitie van de class Persoon. Hierin geef je aan wat elke Persoon moet bevatten.
  • __init__ Methode: Dit is een speciale functie die wordt aangeroepen wanneer een nieuw object van de class wordt gemaakt. In dit geval worden de attributen naam en leeftijd ingesteld op basis van de waarden die bij het maken van de instantie worden doorgegeven.
  • self.naam = naam: self verwijst naar het specifieke object dat is gemaakt. naam is een attribuut van dat object en het wordt ingesteld op de waarde die bij het aanroepen van de class wordt doorgegeven.

2. Instanties van een Class Maken

Nu we de class hebben gedefinieerd, kunnen we instanties van deze class maken, oftewel objecten. Een object is een specifiek voorbeeld van een class met zijn eigen unieke gegevens.

Voorbeeld:

# Twee instanties (objecten) van de class Persoon maken
persoon1 = Persoon("Alice", 30)
persoon2 = Persoon("Bob", 25)

# Toegang tot de attributen van de objecten
print(persoon1.naam)  # Output: Alice
print(persoon1.leeftijd)  # Output: 30
print(persoon2.naam)  # Output: Bob
print(persoon2.leeftijd)  # Output: 25

Uitleg:

  • persoon1 = Persoon("Alice", 30): Hier maken we een object persoon1 van de class Persoon. Het object persoon1 heeft de naam “Alice” en de leeftijd 30.
  • persoon2 = Persoon("Bob", 25): Hier maken we een ander object persoon2, met de naam “Bob” en de leeftijd 25.
  • Toegang tot Attributen: Door persoon1.naam en persoon1.leeftijd aan te roepen, kunnen we de naam en leeftijd van persoon1 opvragen. Elk object heeft zijn eigen set attributen, onafhankelijk van andere objecten.

3. Het Verschil tussen Classes en Instanties

Dit is een cruciaal concept dat vaak verwarrend is voor beginners:

  • Class: Een class is een sjabloon of blauwdruk. Het definieert hoe objecten eruit zullen zien, maar is zelf geen object.
  • Instantie: Een instantie is een specifiek object dat volgens de blauwdruk van de class is gemaakt. Elke instantie heeft zijn eigen gegevens, gebaseerd op de specificaties van de class.

Stel je een class voor als een recept voor het bakken van een cake. Het recept (de class) beschrijft hoe je de cake moet maken, maar de cake zelf (de instantie) wordt pas echt als je het recept volgt en de ingrediënten gebruikt.

4. Functies Binnen een Class

Net zoals een class attributen kan hebben, kan het ook functies (methoden) hebben. Deze functies kunnen werken met de attributen van het object.

Voorbeeld:

class Persoon:
    def __init__(self, naam, leeftijd):
        self.naam = naam
        self.leeftijd = leeftijd

    def begroet(self):
        return f"Hallo, mijn naam is {self.naam} en ik ben {self.leeftijd} jaar oud."

# Twee instanties van de class Persoon maken
persoon1 = Persoon("Alice", 30)
persoon2 = Persoon("Bob", 25)

# Aanroepen van de methoden
print(persoon1.begroet())  # Output: Hallo, mijn naam is Alice en ik ben 30 jaar oud.
print(persoon2.begroet())  # Output: Hallo, mijn naam is Bob en ik ben 25 jaar oud.

Uitleg:

  • Methoden: De begroet methode binnen de Persoon class is een functie die wordt aangeroepen op een specifiek object. Deze methode kan werken met de attributen van dat object.
  • Teruggeven van Waarden: De begroet methode retourneert een string die de naam en leeftijd van de persoon bevat.

6. Het self Argument

Het self argument is een verwijzing naar het specifieke object dat de methode aanroept. Het wordt automatisch door Python doorgegeven en stelt de methode in staat om de attributen van het object te gebruiken en te wijzigen.

Voorbeeld:

class Persoon:
    def __init__(self, naam, leeftijd):
        self.naam = naam
        self.leeftijd = leeftijd

    def verjaard(self):
        self.leeftijd += 1  # Verhoog de leeftijd met 1

# Een instantie van de class Persoon maken
persoon1 = Persoon("Alice", 30)

# Voor de verjaardag
print(persoon1.leeftijd)  # Output: 30

# Methode aanroepen om de leeftijd te verhogen
persoon1.verjaard()

# Na de verjaardag
print(persoon1.leeftijd)  # Output: 31

Uitleg:

  • self.leeftijd += 1: Met self verwijzen we naar het object dat de methode aanroept, in dit geval persoon1. De leeftijd van persoon1 wordt verhoogd met 1.
  • Veranderingen per Object: Het is belangrijk te begrijpen dat de verandering (verhoging van de leeftijd) specifiek is voor het object dat de methode aanroept. Andere objecten van de class Persoon worden hierdoor niet beïnvloed.

Oefeningen

Oefening 1: Class Auto

Maak een class Auto die de attributen merk en bouwjaar heeft. Voeg een methode toon_info toe die de informatie over de auto afdrukt in de vorm van “Merk: [merk], Bouwjaar: [bouwjaar]”. Maak daarna twee objecten van deze class en roep de toon_info methode voor beide objecten aan.

Oefening 2: Class Student

Maak een class Student met de attributen naam en studentnummer. Voeg een methode beschrijving toe die de naam en het studentnummer van de student teruggeeft. Maak drie objecten van de class en druk de beschrijving voor elk object af.

Oefening 3: Class Boek

Maak een class Boek met de attributen titel, auteur, en jaar. Voeg een methode beschrijving toe die de titel, auteur, en het jaar van het boek retourneert. Maak twee objecten van de class en druk de beschrijving voor elk boek af.

Oefening 4: Class Huisdier

Maak een class Huisdier met de attributen naam, soort, en leeftijd. Voeg een methode beschrijving toe die de naam, soort, en leeftijd van het huisdier afdrukt. Maak drie objecten van de class en roep de beschrijving methode voor elk huisdier aan.

Oefening 5: Class Rekening

Maak een class Rekening met de attributen rekeningnummer en saldo. Voeg methoden toe om geld op de rekening te storten (storten) en om geld van de rekening op te nemen (opnemen). Zorg ervoor dat je bij het opnemen van geld controleert of het saldo voldoende is. Maak twee objecten van de class en voer een aantal stortingen en opnames uit.

Oefening 6: Studenten en Projectgroepen

Maak een class ProjectGroep waarin meerdere Student objecten worden beheerd. Voeg functies toe om een student aan een projectgroep toe te voegen, de gemiddelde leeftijd van de groep te berekenen, en om de namen van alle studenten in de groep af te drukken.

Oefening 7: Huisdiereneigenaar

Maak een class Eigenaar die een lijst van Huisdier objecten bevat. De class moet methoden bevatten om huisdieren toe te voegen en om alle huisdieren van een eigenaar af te drukken. De huisdieren zelf hebben een naam, soort en leeftijd. De class bevat ook een methode om die info op het scherm te tonen.

Oefening 8: Rekeningenbeheer in een Bank

Maak een class Bank die meerdere Rekening objecten beheert. Voeg methoden toe om een nieuwe rekening te openen, geld op een rekening te storten, geld van een rekening op te nemen en om de gegevens van alle rekeningen in de bank te tonen.


Previous section:
Navigatie