Python OOP第二次调用deposit方法报'int不可调用'错误如何解决?
报错原因
- 核心问题为实例方法名与实例属性名重名,导致方法被覆盖
- 你定义的
deposit是Bank类的实例方法,但是在方法内部执行了self.deposit = deposit操作,会将实例的deposit属性直接覆盖为传入的整数类型存款金额。 - 第一次调用
bank.deposit(500)时,bank.deposit还指向方法本身,可正常执行;执行完成后bank.deposit已经被替换为整数500,第二次调用时相当于尝试调用整数,就会抛出对应类型错误。 - 另外代码中的
withdraw方法也存在完全相同的重名问题,后续调用时也会触发同类报错,且原方法缺少钱包扣款的逻辑。
解决方案
修改方法内部的属性命名,避免和方法名重名即可,参考修改后代码:
class Bank(): def __init__(self,wallet): self.wallet = wallet def withdraw(self,withdraw_amount): self.withdraw_amount = withdraw_amount self.wallet -= self.withdraw_amount def deposit(self, deposit_amount): self.deposit_amount = deposit_amount self.wallet += self.deposit_amount bank = Bank(0) bank.deposit(500) print(bank.wallet) bank.deposit(500) print(bank.wallet)
内容的提问来源于stack exchange,提问作者Vimalan Karunakaran
相关产品推荐
相关产品推荐

