class MoneyBox:
def __init__(self, capacity):
# конструктор с аргументом – вместимость копилки
def can_add(self, v):
# True, если можно добавить v монет, False иначе
def add(self, v):
# положить v монет в копилку
class MoneyBox:
def __init__(self, capacity):
self.capacity = capacity
self.sum = 0
def can_add(self, v):
pass
def add(self, v):
self.sum += v
from dataclasses import dataclass
@dataclass
class MoneyBox:
sum: float = 0
capacity: float = 100
def can_add(self, v):
v = getattr(v, 'sum', v)
return (self.sum + v) > self.capacity
def __iadd__(self, v):
if self.can_add(v):
raise ValueError('Больше нельзя')
if isinstance(v, MoneyBox):
self.sum += v.sum
elif isinstance(v, (float, int)):
self.sum += v
else:
raise TypeError(f'Не поддерживается тип {type(v)}')
return self
money_box = MoneyBox()
money_box_any = MoneyBox(10)
money_box += money_box_any
print(money_box)
money_box += 10
print(money_box)
money_box += '123'
Traceback (most recent call last):
File "C:/Users/User/PycharmProjects/test/tmp.py", line 1, in <module>
from a import load
File "C:\Users\User\PycharmProjects\test\a.py", line 34, in <module>
money_box += '123'
File "C:\Users\User\PycharmProjects\test\a.py", line 18, in __iadd__
raise TypeError(f'Не поддерживается тип {type(v)}')
TypeError: Не поддерживается тип <class 'str'>
MoneyBox(capacity=0, sum=10)
MoneyBox(capacity=0, sum=20)
class MoneyBox:
def __init__(self, capacity: int):
self.capacity = capacity
self.balance = 0
def can_add(self, amount: int):
return self.capacity - self.balance >= amount
def deposit(self, cash: int):
if cash < 0:
print("error: invalid operation")
else:
self.balance += cash
if __name__ == "__main__":
capital = MoneyBox(50)
condition = 1
while condition == 1:
amount = int(input("Enter a amount: "))
if capital.can_add(amount):
capital.deposit(amount)
print("Current balance in a capital: {}".format(capital.balance))
condition = int(input("Enter 1 to continue, 0 to abort: "))
else:
print("Too large amount")
break