如何在对象列表中停止更新所有对象的词典? (蟒蛇)

时间:2017-10-24 17:48:00

标签: python python-3.x dictionary

对于学校项目,我试图将棋盘游戏转换为Python游戏

我正在翻译的游戏是“股票代码”,它涉及买卖6只股票。可以玩的玩家数量是2-8。我制作一个可变玩家计数的方式是创建一个玩家类,并初始化一个玩家对象并在游戏开始时将其添加到一个列表中。

class player:
    money = 5000
    stocks = {'Gold': 0, 'Tech': 0, 'Oil': 0, 'Grain': 0, 'Industry': 0, 'Bonds': 0}

我使用

创建列表
for i in range(0, playersTotal):
     newPlayer = player()
     playerList.append(newPlayer)

问题在于,当玩家买卖股票并调整价值时,请说:(假设玩家0有0金币)

playerList[0].stocks['Gold'] += 1000

每个玩家的每个字典都以相同的方式更新

print(playerList[1].stocks['Gold'])
>>>1000

我不知道为什么字典会更新列表中的所有玩家对象,因为当调整money属性时它会保持独立:(如果两个玩家都有0钱)

playerList[0].money += 1000
print(playerList[1].money)
>>> 0

如何将字典分开?

1 个答案:

答案 0 :(得分:3)

那是因为您的stocksstatic,您应该将其作为instance变量而不是static变量,请尝试这样做:

class player:    
    def __init__(self):
        self.money = 5000
        self.stocks = {'Gold': 0, 'Tech': 0, 'Oil': 0, 'Grain': 0, 'Industry': 0, 'Bonds': 0}

由于您的stocks变量为static,因此所有实例都使用相同的stocks,因此当您从任何实例更新其值时,它会针对所有实例进行更新实例,因为变量是为所有实例共享的。

<强>输出

>>> for i in range(0, 10):
...      newPlayer = player()
...      playerList.append(newPlayer)
... 
>>> playerList[0].stocks['Gold'] += 5000
>>> playerList[0].stocks['Gold'] 
5000
>>> playerList[1].stocks['Gold']
0