Python的邻居都指向相同的值
我正在用Python制作一个扫雷舰克隆,我遇到了设置“邻居”的问题 这是一节课:Python的邻居都指向相同的值,python,pygame,Python,Pygame,我正在用Python制作一个扫雷舰克隆,我遇到了设置“邻居”的问题 这是一节课: class Box: hasBomb = False numBombNeighbors = 0 clicked = False xcoord = 0 ycoord = 0 neighbors = [None, None, None, None, None, None, None, None] def __init__(self): self.
class Box:
hasBomb = False
numBombNeighbors = 0
clicked = False
xcoord = 0
ycoord = 0
neighbors = [None, None, None, None, None, None, None, None]
def __init__(self):
self.hasBomb = False
self.numBombNeighbors = 0
self.clicked = False
self.xcoord = 0
self.ycoord = 0
for i in xrange(8):
self.neighbors[i] = None
然后我做黑板
def getRandomBoard():
# we will hide 50 random bombs
result = []
for i in xrange(BOARDWIDTH):
result.append([])
for j in xrange(BOARDHEIGHT):
new_box = Box()
new_box.xcoord = i
new_box.ycoord = j
result[i].append(new_box)
# set all the neighbors
result = setNeighbros(result)
for i in range(BOARDWIDTH):
for j in range(BOARDHEIGHT):
print result[i][j].xcoord
print result[0][0].neighbors[5].xcoord
这是设置邻居的函数:
def setNeighbros(board):
for i in range(len(board)):
for j in range(len(board[i])-1):
if j > 0:
board[i][j].neighbors[0] = board[i][j-1]
if j > 0 and i < len(board) -1:
board[i][j].neighbors[1] = board[i+1][j-1]
if i < len(board) - 1:
board[i][j].neighbors[2] = board[i+1][j]
if i < len(board) - 1 and j < len(board[i]) - 1:
board[i][j].neighbors[3] = board[i+1][j+1]
if j < len(board[i]) - 1:
board[i][j].neighbors[4] = board[i][j+1]
if j < len(board[i]) - 1 and i > 0:
board[i][j].neighbors[5] = board[i-1][j+1]
if i > 0:
board[i][j].neighbors[6] = board[i-1][j]
if i > 0 and j > 0:
board[i][j].neighbors[7] = board[i-1][j-1]
return board
def setNeighbros(电路板):
对于范围内的i(len(board)):
对于范围内的j(len(板[i])-1):
如果j>0:
板[i][j]。邻居[0]=板[i][j-1]
如果j>0且i在Board making函数中,我打印xcoord和邻居5的xcoord来检查问题,问题来自设置邻居。在创建邻居的过程中,它们都指向正确的邻居,但在创建完成后,它们都指向同一个邻居,但我知道盒子数组都包含不同的盒子,因为它们有不同的xcoord。如果有人能告诉我为什么所有的邻居都指向同一个框,我将不胜感激。问题是类级别的变量在类的所有实例之间共享 如果您来自像
Java
这样的语言,您可以想象在类中声明的变量都是static
变量
修改类以删除所有类级变量,并在\uuuu init\uuuu
中执行实例级变量的所有初始化
class Box:
def __init__(self):
self.hasBomb = False
self.numBombNeighbors = 0
self.clicked = False
self.xcoord = 0
self.ycoord = 0
self.neighbors = [None for i in xrange(8)]