0

I got this and I was expecting it to print 410 when I print x.withdraw().

Kyle 12345 500
Traceback (most recent call last):
    File "bank.py", line 21, in <module>
        print x.withdraw()
TypeError: 'int' object is not callable

Here is my code:

class Bank:
    def __init__(self, name, id, balance, withdraw):
        self.name = name
        self.id = id
        self.balance = balance
        self.withdraw = withdraw
    def print_info(self):
        return "%s %d %d" % (self.name, self.id, self.balance)
    def withdraw(self):
        if self.withdraw > self.balance:
            return "ERROR: Not enough funds for this transfer"
        elif self.withdraw < self.balance and self.withdraw >= 0:
            self.balance = self.balace - self.withdraw
            return self.balance
        else:
            return "Not a legitimate amount of funds"

x = Bank("Kyle", 12345, 500, 90)
print x.print_info()
print x.withdraw()

Do I need to fix something within the class itself or is something wrong with my method calling?

1 Answer 1

5

You set an attribute on the instance with the same name:

self.withdraw = withdraw

It is that attribute you are trying to call now, not the method. Python doesn't differentiate between methods and attributes, they do not live in separate namespaces.

Use a different name for the attribute; withdrawn (past tense of to withdraw) springs to mind as a better attribute name:

class Bank:
    def __init__(self, name, id, balance, withdrawn):
        self.name = name
        self.id = id
        self.balance = balance
        self.withdrawn = withdrawn
    def print_info(self):
        return "%s %d %d" % (self.name, self.id, self.balance)
    def withdraw(self):
        if self.withdrawn > self.balance:
            return "ERROR: Not enough funds for this transfer"
        elif self.withdrawn < self.balance and self.withdrawn >= 0:
            self.balance = self.balance - self.withdrawn
            return self.balance
        else:
            return "Not a legitimate amount of funds"

(I also corrected a typo; you used balace in one location where you meant to use balance).

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.