Home > Mobile >  why does object turn to int after one use
why does object turn to int after one use

Time:06-28

I am learning python and while going through this OOP'S exercise:

For this challenge, create a bank account class that has two attributes: owner balance and two methods: deposit withdraw As an added requirement, withdrawals may not exceed the available balance.

Now the problem that I am facing is when I run the withdrawal once it works fine, but when I work it the second time it shows the error

" TypeError Traceback (most recent call last) /var/folders/15/yqw5v0lx20q5lrbvg8bb69jr0000gn/T/ipykernel_79159/1232198771.py in ----> 1 acct1.withdraw(200)

TypeError: 'int' object is not callable"

here is my code

class Account:
def __init__(self, owner, balance = 0):
        self.owner = owner
        self.balance = balance
def __str__(self):
    return f"the account holder is {self.owner} \nand the balance is {self.balance}"
        
def deposit(self,deposit):
    self.deposit = deposit
    self.balance  = deposit
    print("deposit accepted")

def withdraw(self, withdraw):
    self.withdraw = withdraw
    if self.balance >= withdraw:
        self.balance -= withdraw
        print("money withdrawn")
    else:
        print("Funds Unavailable!")
    

Kindly let me know where am I going wrong.

CodePudding user response:

Do not name a method the same as a class attribute:

def withdraw(self, withdraw):
    self.withdraw = withdraw

Possible solution:

def perform_withdraw(self, withdraw):
    self.withdraw = withdraw

CodePudding user response:

Before the first call to withdraw, the attribute withdraw of an instance of Account is the method that does your calculation.

After the first call to withdraw, the attribute is whatever argument you called withdraw with, because you issue self.withdraw = withdraw. Use another name or remove the line altogether if it is not needed.

  • Related