Als developer, wil ik dat een methode zelf ongeldige aanroepen weigert en vragen kan beantwoorden met True of False, zodat de data van een object nooit in een onmogelijke toestand komt.
Niet elke methode verandert iets. Sommige beantwoorden een vraag. Je leert query-methodes schrijven die True of False teruggeven en gebruikt ze in een if.
Soms wil je niets veranderen, maar alleen iets weten. Dan schrijf je een
query: een methode die een vraag beantwoordt met True of False.
class Tank:
def __init__(self, capacity):
self.capacity = capacity
self.level = 0
def fill(self, amount):
if not self.can_fit(amount):
return False
self.level += amount
return True
def is_empty(self):
return self.level == 0
def is_full(self):
return self.level == self.capacity
def can_fit(self, amount):
return self.level + amount <= self.capacity
Je gebruikt zo'n vraag direct in een if:
if tank.can_fit(30):
tank.fill(30)
else:
print("Tank is too full")
Stel de tank vragen en kijk of hij verandert.
tank = Tank(100)tank.is_empty() โ leeg of niet?tank.fill(100) โ vul hem helemaal.tank.is_full()tank.can_fit(1) โ kan er nog iets bij?tank.is_empty() โ en nu?tank.level โ veranderden de vragen iets aan het level?Je bankrekening uit taak 1 leert vragen beantwoorden. Daarmee kan een script eerst vragen en dan pas betalen.
BankAccount uit taak 1 over.can_afford(self, amount) toe. De methode geeft True als het saldo minstens amount is, anders False. Hij verandert niets.is_empty(self) toe. De methode geeft True als het saldo precies 0 is.[30, 80]. Kijk per prijs met can_afford of er genoeg is. Is dat zo, betaal dan met withdraw en print "Paid". Anders print je "Not enough money".can_afford en laat zien dat het gelijk blijft.Acceptatiecriteria
BankAccount("Sam", 40).can_afford(50) geeft False; met prijs 30 geeft het True.is_empty() geeft alleen True bij een saldo van 0.bool-waarden terug (True/False), geen tekst.if, en het saldo blijft gelijk na een query.