Classes¶
Zie boek “De Programmeursleerling” hoofdstuk 20 pagina 253.
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 leeftijd doorgegeven kan worden bij het aanmaken van een persoon:
p = Persoon("Jan", "Limburg", 29)
print(p.leeftijd) # toont 29
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¶
Voeg de methode schrijf toe aan je eigen code uit opgave 54. Voeg een method “schrijf_naam” toe die enkel de naam van de persoon afdrukt.
Opgave 56¶
Maak een class “Enemy” die de x- en y-coordinaten en x_change en y_change van een vijand bijhoudt.
Instances¶
Het grote voordeel van zo’n classes is dat we nu meerdere personen (of vijanden) 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”.
Met de Enemy class die je aanmaakte kunnen dus ook meerdere vijanden in je spel aangemaakt worden:
vijand1 = Enemy(100, 0, 0, 1) # langzame vijand
vijand2 = Enemy(100, 0, 0, 5) # snelle vijand
Opgave 57¶
Voorzie een method “schrijf” die deze coordinaten op het scherm afdrukt met print.
Opgave 58¶
Voeg een method “update” toe aan je class Enemy uit opgave 57, waarin de nieuwe positie van je vijand berekend wordt, gebruik makend van x, x_change, y en y_change.
Opgave 59¶
Implementeer een class Cirkel waarmee je de omtrek en oppervlakte van een Cirkel kan berekenen:
c = Cirkel(r=3)
print(c.omtrek()) # toont 18.85
print(c.oppervlakte()) # toont 28.27
print(c) # toont: cirkel met straal 3