如何在Python中跨类修改变量:大富翁游戏银行金额不更新问题
问题根因
你在pay_bank方法中每次调用Bank().receive_payment(to_bank)时,都会通过Bank()创建一个全新的Bank类临时实例。每个新实例初始化时bank_total都会被重置为14580,且调用完方法后该临时实例会直接被回收,没有复用同一个银行实例,因此累加的数值无法被持久保存。
修复方案
整个游戏全局应该仅保留一个唯一的银行实例,所有玩家的支付操作都针对这个实例执行。修改方式如下:
- 在游戏初始化逻辑/全局位置创建唯一的Bank实例,不要在支付逻辑中临时生成实例
- 将该实例绑定到Card1类中,后续支付操作直接复用该实例调用方法
代码示例
# 导入Bank类后先创建全局唯一的银行实例,不要在支付逻辑内创建 from bank import Bank game_bank = Bank() # 修改Card1类,绑定银行实例 class Card1: def __init__(self, bank_instance): self.amount = 1500 self.properties = {} self.bank = bank_instance # 持有全局银行实例的引用 def manage_player1_card(self): def pay_bank(): to_bank = int(payBox.get()) if self.amount > to_bank: payBox.delete(0, END) self.amount -= to_bank # 复用已有实例,不要新建Bank() self.bank.receive_payment(to_bank) # 初始化Card1时传入全局银行实例 player1_card = Card1(bank_instance=game_bank)
可选简化方案
如果不想每次传参,也可以直接在bank.py文件末尾提前实例化好银行对象:
# bank.py文件末尾添加 bank = Bank()
之后Card1中直接导入该实例使用即可:
from bank import bank # pay_bank方法中直接调用 bank.receive_payment(to_bank)
内容的提问来源于stack exchange,提问作者adrman47
相关产品推荐
相关产品推荐

