Sprint 6 Β· De blauwdruk  Β·  US2: De constructor & self

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.

Taak 1: __init__ dwingt data af

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.

De pijn: een object zonder naam

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
Vergeet je de naam nu, dan crasht het meteen.
Dog() zonder argument geeft direct een TypeError β€” bij het aanmaken, niet drie schermen later. Een hond zonder naam kan simpelweg niet meer bestaan.

Zie de constructor als poortwachter

Typ een naam en klik op Dog(name) β€” je krijgt een compleet object. Laat het veld leeg en probeer het: de constructor weigert.

Dog( )
>>> Oefenomgeving: Python REPL Simulator

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.

  1. rex = Dog("Rex") β€” met naam.
  2. rex.name en rex.energy
  3. stray = Dog() β€” zonder naam. Wat gebeurt er?
  4. bella = Dog("Bella") β€” nog een hond.
  5. bella.name
Python 3.11 REPL Simulator Β· class Dog met __init__(self, name) is gedefinieerd.
>>> 
🧩

Jouw opdracht: geef Player een constructor

Breid je Player-class uit met een __init__ die de naam verplicht maakt.

  1. Geef Player een __init__(self, name).
  2. Zet in de constructor self.name uit de parameter, en self.lives en self.score op vaste startwaarden.
  3. Maak twee spelers aan met een naam.
  4. Probeer bewust één keer Player() zonder naam en noteer in commentaar welke fout je krijgt.

Acceptatiecriteria

  • Player heeft een __init__ met self en een verplichte name.
  • De constructor zet self.name, self.lives en self.score.
  • Je maakt spelers aan door de naam mee te geven: Player("Mario").
  • In commentaar staat welke fout Player() zonder naam oplevert en waarom dat juist goed is.