Задача «Дескриптор с комиссией» Решение

Часто при зачислении каких-то средств на счет с нас берут комиссию. Давайте реализуем похожий механизм с помощью дескрипторов. Напишите дескриптор Value, который будет использоваться в нашем классе Account.

class Account:
    amount = Value()
    def __init__(self, commission):
        self.commission = commission
У аккаунта будет атрибут commission. Именно эту коммиссию и нужно вычитать при присваивании значений в amount.
new_account = Account(0.1)
new_account.amount = 100
print(new_account.amount)
90

Решение 1

class Value:
    def __get__(self, instance, owner):
        return self.result

    def __set__(self, instance,
                value):
        self.result = value * (1 - instance.commission)


class Account:
    def __init__(self, commission):
        self.commission = commission

    amount = Value()


new_account = Account(0.3)
new_account.amount = 100
print(new_account.amount)
new_account.amount = 160
print(new_account.amount)




Решение 2

class Value:
    def __init__(self):
        self.amount = 0
    def __get__(self, obj, obj_type):
        return self.amount
    def __set__(self, obj, value):
        self.amount = value — value * obj.commission