Slide 72
Slide 72 text
-FWFMJDPOUSBDU࣮ྫᶄ
# @requireデコレータで事前条件を定義
# @snapshot / @ensureデコレータで事後条件を定義
@icontract.require(lambda self, amount: self.status == "active")
@icontract.require(lambda self, amount: amount > 0)
@icontract.require(lambda self, amount: amount <= self.balance)
@icontract.snapshot(lambda self: self.balance, name="bal")
@icontract.ensure(lambda self, amount, result, OLD:
result == self.balance and OLD.bal - self.balance == amount)
def withdraw(self, amount: int) -> int:
self.balance -= amount
return self.balance