“int"对象在python中不可调用 [英] 'int' object is not callable in python

查看:28
本文介绍了“int"对象在python中不可调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得到了这个,我期待它在我打印 x.withdraw() 时打印 410.

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

这是我的代码:

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?

推荐答案

您在同名实例上设置了一个属性:

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

self.withdraw = withdraw

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

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.

为属性使用不同的名称;withdrawn(撤回的过去时)作为一个更好的属性名称浮现在脑海中:

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"

(我还更正了一个错字;您在要使用 balance 的地方使用了 balace.

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

这篇关于“int"对象在python中不可调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆