Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
603 views
in Technique[技术] by (71.8m points)

class - 'int' object is not callable in python

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...