Sprint 7 ยท Methodes & self  ยท  US1: State via een eigen methode

Als gamedeveloper, wil ik dat elk spelobject zijn eigen toestand binnen zichzelf bijhoudt en aanpast, zodat een losse functie nooit per ongeluk het verkeerde object of een zwevende variabele raakt.

Taak 3: Wat geeft een methode terug?

Methodes kunnen meer dan alleen de state aanpassen โ€” ze kunnen ook informatie teruggeven. Je leert het verschil tussen een methode die iets print versus een methode die iets teruggeeft met return.

print vs return โ€” twee soorten output

Tot nu toe schreven methodes als turn_on() die de state aanpassen maar niets teruggeven. Maar een methode kan ook een waarde berekenen en die terugsturen naar de aanroeper. Vergelijk:

class Lamp:
    def __init__(self, name, power):
        self.name   = name
        self.power  = power   # in watt
        self.is_on  = False

    def print_consumption(self):      # print โ€” NIET herbruikbaar als waarde
        print(self.power * 0.001, "kW")

    def get_consumption(self):       # return โ€” kan je opslaan of vergelijken
        return self.power * 0.001

Het verschil merk je zodra je de methode wil gebruiken in een berekening:

lamp = Lamp("desk", 60)

# โŒ print-variant โ€” je kunt er niets mee doen na de aanroep
total = lamp.print_consumption() * 5    # TypeError: NoneType * int

# โœ… return-variant โ€” kan je opslaan, printen, optellen, vergelijken
consumption = lamp.get_consumption()       # 0.06
print("Consumption:", consumption, "kW")    # Consumption: 0.06 kW
print("5 hours:", consumption * 5, "kWh") # 5 hours: 0.3 kWh
Geen return = None. Als een methode geen return heeft, geeft Python automatisch None terug. Dat is niet een fout โ€” maar als jij probeert None * 5 te berekenen, crasht je programma alsnog.

Zie de stroom

Druk op Volgende stap en volg hoe de aanroep door de methode loopt en de return-waarde terug naar de aanroeper vloeit.

Aanroeper
consumption = lamp.get_consumption()
โ†“
Methode start
def get_consumption(self):
โ†“
Berekening & return
return self.power * 0.001 # = 0.06
โ†‘ return-waarde gaat terug
Aanroeper ontvangt
consumption = 0.06 โœ“
>>> Oefenomgeving: Python REPL Simulator

Ontdek het verschil tussen een methode met en zonder return.

  1. lamp = Lamp("desk", 60)
  2. lamp.print_consumption() โ€” wat zie je? Geen return-waarde.
  3. x = lamp.print_consumption() โ€” sla het resultaat op.
  4. x โ€” wat is de waarde van x?
  5. lamp.get_consumption() โ€” nu met return.
  6. y = lamp.get_consumption()
  7. y * 5 โ€” nu kan je er mee rekenen!
  8. lamp.get_status() โ€” een methode die een f-string returnt.
Python 3.11 REPL Simulator ยท typ een commando en druk op Enter. # class Lamp: # def __init__(self, name, power): # self.name=name; self.power=power; self.is_on=False # def print_consumption(self): print(self.power * 0.001, "kW") # def get_consumption(self): return self.power * 0.001 # def get_status(self): # s = "on" if self.is_on else "off" # return f"{self.name} is {s}, {self.power}W"
>>> 
๐Ÿงฉ

Jouw opdracht: get_health() en is_alive()

Je geeft je speler methodes die informatie teruggeven โ€” zodat je code er beslissingen mee neemt.

  1. Maak een class Player met in __init__ onder andere self.health = 3 en self.y = 100.
  2. Schrijf een methode get_health(self) die self.health teruggeeft (met return, niet print).
  3. Schrijf een methode is_alive(self) die True teruggeeft als de health boven 0 is.
  4. Verlaag de health naar 0 en gebruik is_alive() in een if-statement om "game over" te bepalen.
  5. Bewaar de returnwaarde van get_health() in een variabele en reken ermee โ€” toon zo het verschil met een methode die alleen print.

Acceptatiecriteria

  • get_health() gebruikt return en de waarde is op te slaan in een variabele.
  • is_alive() geeft een bool terug die in een if bruikbaar is.
  • Een if player.is_alive(): stuurt de "game over"-beslissing correct aan.
  • In commentaar staat het verschil tussen een methode die print en een die returnt.