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.
De fix voor taak 1: je verplaatst de losse functies naar binnen de class.
Nu schrijf je rex.decrease_energy(20) โ de methode weet via self
altijd aan welk object hij werkt, en heeft direct toegang tot alle attributen.
Zodra je een functie binnen de class zet, wordt het een methode. Het verschil
zit in self: de methode heeft automatisch toegang tot alle attributen van
het object waarvoor hij wordt aangeroepen.
class Dog:
def __init__(self, name):
self.name = name
self.energy = 100
self.tricks = 0
def decrease_energy(self, points):
self.energy -= points # self.energy โ geen parameter nodig!
def learn_trick(self):
self.tricks += 1
def get_status(self):
return f"{self.name}: {self.energy} energy, {self.tricks} tricks"
Aanroepen:
rex = Dog("Rex")
bella = Dog("Bella")
rex.decrease_energy(30) # self = rex โ alleen rex.energy daalt
bella.learn_trick() # self = bella โ alleen bella.tricks stijgt
print(rex.get_status()) # Rex: 70 energy, 0 tricks
print(bella.get_status()) # Bella: 100 energy, 1 tricks
decrease_energy heb je niet alleen self.energy, maar
ook self.name en self.tricks โ zonder extra parameters.
Klik op een actie bij rex of bella. De spotlight toont welk object
self was tijdens de methode-aanroep.
Bewijs dat de methode alleen het juiste object aanpast.
rex = Dog("Rex")bella = Dog("Bella")rex.decrease_energy(30)rex.energy โ daalde het?bella.energy โ ongewijzigd?bella.learn_trick()bella.tricks โ stijgt het?rex.tricks โ ongewijzigd?rex.get_status() โ status returnt een string.Je refactort de losse functie uit taak 1 naar een echte methode van de class.
Product-class uit taak 1 en verwijder de losse functie decrease_stock.sell(self, amount) toe die de voorraad verlaagt.get_status(self) toe die een f-string returnt met naam en voorraad.apple.sell(3) aan. Bewijs dat pear.stock onveranderd is.get_status().Acceptatiecriteria
sell is nu een methode van Product, geen losse functie.apple.sell(3) โ het object staat voor de punt, niet tussen de haakjes.get_status() returnt een f-string (geen print binnenin).pear.stock nog 10.