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

Python继承实现电商每三次购物返50功能的代码问题排查

问题排查与修正

核心问题

你的ShopCashBack子类中,满足第三次购物返现条件时,仅计算了返现后的余额并打印,但未实际将50返现添加到账户余额中。代码里的result = self.getBalance() + 50; print(result)只是输出了一个临时计算值,账户的真实余额并未改变,导致后续打印getBalance()时输出的是扣完购物款后的原始余额(1104),和之前打印的临时值(1154)重复,与期望结果不符。

修正后的代码

父类Shop(无需修改)

class Shop:
    def __init__(self):
        self.__balance = 0

    def getBalance(self):
        return self.__balance

    def loadWallet(self, amount):
        self.__balance += amount

    def purchase(self, amount_val):
        if amount_val <= self.__balance:
            self.__balance -= amount_val
        else:
            print("Insufficient Funds")

子类ShopCashBack(修改返现逻辑)

class ShopCashBack(Shop):
    def __init__(self, base_val=0):
        self.__numpurchase = base_val
        super().__init__()  # 用super()调用父类构造更规范,替代Shop.__init__(self)

    def getPurch(self):
        return self.__numpurchase

    def purchase(self, amount_val):
        self.__numpurchase += 1
        # 先执行父类的扣款逻辑
        super().purchase(amount_val)  # 同样用super()调用父类方法
        
        # 满足返现条件时,实际添加50到余额
        if self.__numpurchase % 3 == 0:
            self.loadWallet(50)  # 调用父类的loadWallet修改余额

测试验证

运行你的测试代码:

user = ShopCashBack()

user.loadWallet(5000)
user.purchase(299)
print(user.getBalance())

user.loadWallet(3000)
print(user.getBalance())
user.purchase(4990)
print(user.getBalance())

user.purchase(1607)
print(user.getBalance())

输出结果将与期望一致:

4701
7701
2711
1154

补充说明

  • 使用super()替代直接调用父类名的方式,能让代码更易维护(比如父类名变更时无需修改子类)。
  • 返现逻辑通过调用父类的loadWallet(50)实现,遵循了父类封装的余额修改规则,避免直接操作私有属性__balance。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:20:22