1

可能重复:
Python 中的“Least Astonishment”:
无缘无故在对象之间共享的可变默认参数字典?

     class Player():
        zones = {}
        def __init__(self):
            self.zones['hand'] = []
        def InitHand(self):
            for a in range(5):
                self.zones['hand'].append(a)
lst = []
lst.append(Player())
lst.append(Player())
lst[0].InitHand()
print lst[1].zones['hand']

这会打印“[0, 1, 2, 3, 4]”,但我只初始化了第 0 个元素......如下所示将它们更改为数组可以解决问题,但对于我来说,我无法弄清楚为什么会这样发生。

    class Player2():
        zones = []
        def __init__(self):
            self.zones = []
        def InitHand(self):
            for a in range(5):
                self.zones.append(a)
lst = []
lst.append(Player2())
lst.append(Player2())
lst[0].InitHand()
print lst[1].zones

这会按预期打印“[]”

4

1 回答 1

3

在您的代码中,所有玩家共享同一个zones字典。在类范围内设置的任何内容都是属性,而不是实例属性。

class Player():
    def __init__(self):
        self.zones = {}
        self.zones['hand'] = []
    def InitHand(self):
        for a in range(5):
            self.zones['hand'].append(a)
于 2013-01-22T17:55:05.793 回答