Python:新对象使用前一个对象的属性
我正在创建三个Python:新对象使用前一个对象的属性,python,python-3.x,binding,scope,Python,Python 3.x,Binding,Scope,我正在创建三个游戏对象。但是,第二个和第三个对象没有初始化新的块列表。当我调试时,我可以看到他们使用来自初始游戏对象的列表,只是附加块。这是什么原因?如何让对象不使用相同的块列表 class Game(object): blocks = [] def __init__(self): cords = [ [0, 0], [0, 1], [0, 2], [0, 3], [1, 0], [1, 1], [1, 2],
游戏
对象。但是,第二个和第三个对象没有初始化新的块
列表。当我调试时,我可以看到他们使用来自初始游戏对象的列表,只是附加块。这是什么原因?如何让对象不使用相同的块
列表
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]))
这是因为您如何将
块
-定义为类属性。类属性不属于类的任何单个实例,并且在绑定到它的类级别上的任何位置共享
要使每个游戏
对象都有自己的块
,需要将块
作为实例属性。您可以在\uuu init\uuu
方法中将块绑定到类的每个实例,这样每个游戏
都有自己的块列表
def __init__(self):
self.blocks = []
停止将对象绑定到类。