'int'对象在python中不可调用

0 python methods class

我得到了这个,当我打印x.withdraw()时,我希望它能打印410.

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

这是我的代码:

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()
Run Code Online (Sandbox Code Playgroud)

我是否需要在类本身内修复某些内容,或者我的方法调用有问题?

Mar*_*ers 5

您在具有相同名称的实例上设置属性:

self.withdraw = withdraw
Run Code Online (Sandbox Code Playgroud)

这是您现在尝试调用的属性,而不是方法.Python不区分方法和属性,它们不存在于单独的命名空间中.

为属性使用不同的名称; withdrawn(过去时的退出)会让人想起更好的属性名称:

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"
Run Code Online (Sandbox Code Playgroud)

(我也纠正了一个错字;你balace在一个你想要使用的地方使用过balance).