Classes¶
Zie boek “Leren programmeren met Python” pagina 325 .
Introductie¶
We zagen hoe we stukjes code kunnen groeperen in een functie, en via parameters het effect ervan kunnen varieren.
Een functie kan echter geen gegevens bijhouden. Python voorziet echter classes om gegevens samen met functies te groeperen. Een voorbeeld:
class Persoon:
def __init__(self, naam, woonplaats):
self.naam = naam
self.woonplaats = woonplaats
p = Persoon("Jan", "Limburg")
print(p.naam)
In bovenstaand voorbeeld noemen we “Persoon” een klasse of class. De class Persoon groepeert de naam en woonplaats van een persoon. En “p” noemen we een object. Soms wordt een class ook wel vergeleken met een stempel, en het object een afdruk van die stempel.
We hebben er nog geen andere extra functionaliteit aan toegevoegd, dus het afdrukken doen we nog via de gewone functie print.
Opgave 54¶
Kopieer bovenstaande code, en pas de code aan zodat ook de woonplaats afgedrukt wordt.
Methods¶
We kunnen nu ook extra functionaliteit aan die class toevoegen:
class Persoon:
def __init__(self, naam, woonplaats):
self.naam = naam
self.woonplaats = woonplaats
def schrijf(self):
print(f"Hallo, mijn naam is {self.naam} en ik woon in {self.woonplaats}.")
p = Persoon("Jan", "Limburg")
p.schrijf()
In bovenstaand voorbeeld zit de functionaliteit om de gegevens van de persoon af te drukken in de class zelf. Functie die in een class gedefinieerd worden noemen we “methods”. In ons voorbeeld is “schrijf” dus een “method”.
Opgave 55¶
Kopieer bovenstaande code, en voeg een method “schrijf_naam” toe die enkel de naam van de persoon afdrukt.
Opgave 56¶
Schrijf een programma waarin je een class definieert “Enemy” die de x- en y-coordinaten van een vijand bijhoudt. Voorzie een method “schrijf” die deze coordinaten op het scherm afdrukt met print.
Instances¶
Het grote voordeel van zo’n classes is dat we nu meerdere personen kunnen aanmaken:
piet = Persoon("Piet", "Maaseik")
persoon3 = Persoon("Joris", "Lanklaar")
persoon4 = Persoon("Corneel", "Genk")
piet.schrijf()
persoon3.schrijf()
persoon4.schrijf()
Daarom vergelijkt men classes soms met stempels en de objecten met de afdrukken ervan. In bovenstaande code zie je dat we door middel van de class Persoon, meerdere objecten aanmaken die heel gelijkaardig zijn: Ze hebben allemaal een naam en woonplaats, en een method “schrijf”.
Opgave 57¶
Pas je programma uit opgave 56 aan, zodat er meerdere objecten gemaakt worden met je class Enemy. Maak vijanden op volgende posities:
x: 200, y: 200
x: 100, y: 50
x: 50, y: 10
Opgave 58¶
Pas je programma uit opgave 57 aan, zodat er buiten de x- en y-coordinaten ook de verandering in x en de verandering in y in bijgehouden worden (x_change, en y_change).
Opgave 59¶
Voeg een method “update” toe aan je class Enemy uit opgave 58, waarin de nieuwe positie van je vijand berekend wordt, gebruik makend van x, x_change, y en y_change.