Als developer, wil ik dat elk nieuw object verplicht met de juiste startgegevens wordt aangemaakt en zelf weet welk object het is, zodat ik nooit een halfleeg object rondstuur en elke methode met de juiste eigen data werkt.
In taak 3 zette je de naam er nΓ‘ het aanmaken op β en dat kun je vergeten. Een object zonder naam
crasht pas later, midden in je programma. De __init__-methode maakt dat onmogelijk: geen
naam, geen object.
Tot nu toe zette je de naam er los op, nΓ‘ het aanmaken:
rex = Dog()
# ... vergeten om rex.name in te stellen ...
print(rex.name) # AttributeError: 'Dog' object has no attribute 'name'
Niets dwong je om die naam in te vullen. De fout komt pas als je hem opvraagt β misschien pas veel later, op een heel andere plek in je programma. Dat is een tijdbom.
De oplossing is een speciale methode die Python automatisch aanroept bij het
aanmaken van elk object: __init__ (de constructor). Wat daar als parameter
staat, is verplicht:
class Dog:
def __init__(self, name):
self.name = name
self.energy = 100
rex = Dog("Rex") # naam moet je nu meegeven
print(rex.name) # Rex
Dog() zonder argument geeft direct een TypeError β bij het aanmaken,
niet drie schermen later. Een hond zonder naam kan simpelweg niet meer bestaan.
Typ een naam en klik op Dog(name) β je krijgt een compleet object. Laat het veld leeg en probeer het: de constructor weigert.
De class Dog heeft een __init__(self, name) die ook
self.energy = 100 zet. Maak objecten mΓ©t en zΓ³nder naam en zie het verschil.
rex = Dog("Rex") β met naam.rex.name en rex.energystray = Dog() β zonder naam. Wat gebeurt er?bella = Dog("Bella") β nog een hond.bella.nameBreid je Player-class uit met een __init__ die de naam verplicht maakt.
Player een __init__(self, name).self.name uit de parameter, en self.lives en
self.score op vaste startwaarden.Player() zonder naam en noteer in commentaar welke fout
je krijgt.Acceptatiecriteria
Player heeft een __init__ met self en een verplichte
name.self.name, self.lives en self.score.Player("Mario").Player() zonder naam oplevert en waarom dat juist
goed is.