Python自制卡牌游戏修改单个玩家deck时所有玩家deck同步变更问题
问题根因
你定义Player类时,将deck、cards_av、power声明为了类属性,这类属性的内存空间是所有Player实例共享的。对于列表这类可变类型的类属性,任意一个实例对其做修改,所有实例的对应属性都会同步生效,这就是你给第0个玩家的deck添加元素后,第1个玩家的deck也会出现相同元素的核心原因。
修复方法
将原本的类属性迁移到__init__构造函数中,改为每个实例独有的实例属性即可,修改后的Player类代码如下:
class Player: def __init__(self, turn): self.turn = turn self.power = 4 self.deck = [] self.cards_av = []
另外你代码中的Game_Engine类里的objs、background、players等属性也都是类属性,如果后续你有创建多个Game_Engine实例的需求,也会出现相同的属性共享问题,建议也统一移到Game_Engine的__init__方法中初始化。
内容的提问来源于stack exchange,提问作者opetch18
相关产品推荐
相关产品推荐

