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, i
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).