Als developer, wil ik gedrag vastleggen bij de data waar het bij hoort in plaats van in losse functies ernaast, zodat elke aanroep automatisch weet op welk object hij werkt.
Methodes op hetzelfde object kunnen elkaar aanroepen via self. Een methode
play() kan intern self.decrease_energy(5) aanroepen — zo bouw
je gedrag op uit kleinere stukjes, zonder die stukjes van buiten aan te sturen.
Methodes op hetzelfde object kunnen elkaar aanroepen. De truc: binnen een methode
gebruik je self om een andere methode van hetzelfde object aan te roepen.
class Dog:
def __init__(self, name):
self.name = name
self.energy = 100
self.tricks = 0
def decrease_energy(self, points):
self.energy = max(0, self.energy - points)
def play(self):
self.decrease_energy(5) # roept een andere methode aan!
self.tricks += 1
print(f"{self.name} plays! Energy: {self.energy}, tricks: {self.tricks}")
Wanneer je rex.play() aanroept, wordt intern self.decrease_energy(5)
aangeroepen — waarbij self nog steeds rex is. Er is geen verwarring
over welk object bedoeld wordt.
rex.play() regelt intern de energie verlagen én een trick optellen —
de aanroeper hoeft niets te weten over die details.
Druk op Volgende stap om te zien wat er van binnen gebeurt als je
rex.play() aanroept.
Volg de keten van methode-aanroepen.
rex = Dog("Rex")rex.energy — beginstatus.rex.play() — roept intern decrease_energy(5) én increase_tricks() aan.rex.energy — gedaald naar 95?rex.tricks — gestegen naar 1?rex.play() — nogmaals.rex.energy — nu 90?rex.get_status() — alles in één string.Je bouwt een Product-class waarbij een methode intern een andere methode aanroept.
Product met self.name, self.stock = 10 en self.restock_needed = False.check_low_stock(self). Is de voorraad 3 of lager? Dan zet de methode self.restock_needed = True en print "[name] is almost sold out!".sell(self, amount) die de voorraad verlaagt en daarna intern self.check_low_stock() aanroept.apple. Zorg dat de melding verschijnt op het moment dat de voorraad 3 of lager wordt.pear.restock_needed nog False is.Acceptatiecriteria
apple.sell(3) is apple.restock_needed == True.check_low_stock() wordt aangeroepen vanuit sell() — niet van buiten.pear.restock_needed is nog False.