ООП (Неверный вывод данных)

столкнулся с такой проблемой, при добавления нового значения через свойство, то результатом будет всегда на 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 шт):

Автор решения: CrazyElf

Я примерно понял, как вы получили такой результат:

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__, соответственно. Иначе это какая-то непрозрачная логика - при выставлении значения происходит добавление. Тот, кто будет читать ваш код, будет удивлён.

→ Ссылка