我正在创建三个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]))
答案 0 :(得分:2)
这是因为您将blocks
定义为类属性。类属性不属于类的任何单个实例,并且在绑定到的类级别的任何位置都是共享的。
要让每个Game
对象都有自己的blocks
,您希望blocks
成为实例属性。您可以在__init__
方法中将块绑定到类的每个实例,这样每个Game
都有自己的列表blocks
。
def __init__(self):
self.blocks = []