Как вычислить переменную, объявленную в методе из функции класса python

#python #class

#python #класс

Вопрос:

нужна помощь по поводу моего кода (python):

 class Account:
    def __init__(self, money):
        self.money= money
    def __str__(self):
        return f'Money in the bank: {self.money} dollar'
    def withdraw(self,withdraw):
        self.withdraw = withdraw
        money = self.money-self.withdraw
        return money
print(Account.withdraw(20000,1000))  
  

Что я хочу от кода выше, так это то, что код напечатает мои оставшиеся деньги (19000), но я всегда получал ошибку

объект ‘int’ не имеет атрибута ‘withdraw’.

Я много чего перепробовал за 4 часа, но не получил удовлетворительного результата.

Это мой первый вопрос на этом форуме, прошу прощения, если форматирование неправильное. Заранее благодарю вас 🙂

Комментарии:

1.Предполагается, что вы должны создавать экземпляры объектов для их использования. Точно так же, как mylist = list() создается список, вам нужно создать объект account , account = Account() . Однако, обратите внимание, account.withdraw(whatever) будет работать только один раз, потому что при этом вы затеняете метод def withdraw внутри себя self.withdraw = withdraw , поэтому при втором выходе вы получите TypeError, потому int что объекты нельзя вызывать. Почему вы self.withdraw все равно присваиваете a?

Ответ №1:

Ниже я внес некоторые небольшие изменения в ваш код, и он работает так, как вы ожидаете.

  1. Определена новая переменная WithdrawMoney для отслеживания суммы вывода.

  2. Некоторые изменения в формате строки.

  3. Каждый раз возвращалось обновленное количество.

     class Account:
      def __init__(self, money):
        self.money= money
        self.withdrawMoney = 0
    
      def __str__(self):
        return "Money in the bank: {} dollar".format(self.money)
    
      def withdraw(self,withdrawMoney):
        self.withdrawMoney = withdrawMoney
        self.money = self.money-self.withdrawMoney
        return self.money
    
    acc = Account(20000)
    print(acc.withdraw(1000)) # 19000
    print(acc.withdraw(1000)) # 18000