Python:New Object使用前一个Object的属性

时间:2016-05-15 07:28:44

标签: python python-3.x binding scope

我正在创建三个Game个对象。但是,第二个和第三个对象未初始化新的blocks列表。当我调试时,我可以看到他们使用初始Game对象中的列表,只是追加块。这是什么原因?如何让对象不使用相同的blocks列表?

class Game(object):

    blocks = []

    def __init__(self):
        cords = [
            [0, 0], [0, 1], [0, 2], [0, 3],
            [1, 0], [1, 1], [1, 2], [1, 3],
            [2, 0], [2, 1], [2, 2], [2, 3],
            [3, 0], [3, 1], [3, 2], [3, 3]
        ]

        random.shuffle(cords)

        for i in range(0, 16):
            self.blocks.append(Block(i + 1, cords[i][0], cords[i][1]))

1 个答案:

答案 0 :(得分:2)

这是因为您将blocks定义为类属性。类属性不属于类的任何单个实例,并且在绑定到的类级别的任何位置都是共享的。

要让每个Game对象都有自己的blocks,您希望blocks成为实例属性。您可以在__init__方法中将块绑定到类的每个实例,这样每个Game都有自己的列表blocks

def __init__(self):
    self.blocks = []