You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python OOP练习BankAccount类方法测试出现AssertionError求解决

问题原因
  • 核心错误是你定义的deposit()、withdraw()、transfer()三个方法都没有显式的return语句,Python中所有没有指定返回值的函数/方法,默认都会返回None。你测试代码里直接将这三个方法的调用结果赋值给变量,再和预期的数值对比,自然会出现None和数值不匹配的AssertionError。
  • 次要问题是你的测试逻辑不符合方法的设计定位:这三个方法是用来修改账户余额的状态方法,不需要返回操作金额,你应该在每次操作后调用get_balance()获取当前余额验证是否符合预期,而不是验证方法的返回值。
修复方案

你可以任选以下两种方案之一修改:

方案1:调整测试逻辑(推荐,符合常规设计)

常规的账户操作方法不需要返回操作金额,直接修改实例属性即可,只需要修改测试部分的校验逻辑:

def test_BankBankAccount():
    test_account = BankAccount("Dude", "man", "1234", 0)
    test_account2 = BankAccount("Dude2", "man2","5678", 0)

    # 验证存款
    test_account.deposit(400)
    assert test_account.get_balance() == 400, f"存款后余额应为400,实际为{test_account.get_balance()}"

    # 验证转账
    test_account.transfer(test_account2, 200)
    assert test_account.get_balance() == 200, f"转出200后余额应为200,实际为{test_account.get_balance()}"
    assert test_account2.get_balance() == 200, f"转入200后余额应为200,实际为{test_account2.get_balance()}"

    # 验证取款
    test_account.withdraw(200)
    assert test_account.get_balance() == 0, f"取款200后余额应为0,实际为{test_account.get_balance()}"

方案2:给三个方法添加return语句

如果你确实需要方法返回操作的金额,就修改类中的三个方法:

def deposit(self, amount):
    self._balance += amount
    return amount

def withdraw(self, amount):
    self._balance -= amount
    return amount

def transfer(self,other_account, transfer_amount):
    self.withdraw(transfer_amount)
    other_account.deposit(transfer_amount)
    return transfer_amount

修改后你原来的测试代码就能正常运行,不过这种设计并不常见,一般状态修改方法不需要返回操作参数。

内容的提问来源于stack exchange,提问作者fredericoamigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:27:04