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.
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.
__init__
MethodeLaten 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.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.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.Dit is een cruciaal concept dat vaak verwarrend is voor beginners:
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.
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:
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.begroet
methode retourneert een string die de naam en leeftijd van de persoon bevat.self
ArgumentHet 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.Persoon
worden hierdoor niet beïnvloed.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.
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.
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.
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.
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.
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.
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.
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.