ООП (Неверный вывод данных)
столкнулся с такой проблемой, при добавления нового значения через свойство, то результатом будет всегда на 1 единицу больше (Было 20, добавляю ещё 20 и результатом будет 41). Если сделать то же самое без классов - будет работать так, как нужно.
class Money:
def __init__(self, dollars, cents):
self.total_cents = dollars * 100 + cents
@property
def dollars(self):
return self.total_cents // 100
@dollars.setter
def dollars(self, value):
if not isinstance(value, int) and value >= 0:
raise ValueError("Переданы не верные аргументы")
self.total_cents += value * 100 + self.total_cents % 100
Ответы (1 шт):
Я примерно понял, как вы получили такой результат:
m = Money(20,50)
print(m.dollars)
m.dollars = 20
print(m.dollars)
Вывод:
20
41
Но ведь всё логично, если посмотреть на эту строчку:
self.total_cents += value * 100 + self.total_cents % 100
Это будет:
2050 + 20 * 100 + 2050 % 100 = 2050 + 2000 + 50 = 4100
Честно говоря, я вообще не очень понимаю, зачем вы в сеттере добавляете значение. Сеттер нужен для установки значения, а не для добавления. А у вас там какая-то хитрая логика, которая добавляет значение к текущему. Если вы хотите прописать логику добавления, то и реализуйте оператор __add__, соответственно. Иначе это какая-то непрозрачная логика - при выставлении значения происходит добавление. Тот, кто будет читать ваш код, будет удивлён.