1 回答

TA貢獻1797條經驗 獲得超4個贊
看起來這是因為板在所有實例之間共享(它是一個類屬性,而不是一個實例屬性)。
您可以使用此更改您的類代碼,它應該可以工作:
class TicTacToeBoard:
def __init__(self):
# Now each instance (self) has its own board:
self.board = [[0,0,0], [0,0,0], [0,0,0]]
def printBoard(self):
print(self.board)
def putPiece(self, position1, position2):
self.board[position1][position2] = 1
如果你想說服自己真正發生了什么,你可以比較兩個版本(實例/類屬性):
class TicTacToeBoard:
shared_board = [[0,0,0], [0,0,0], [0,0,0]]
def __init__(self):
self.board = [[0,0,0], [0,0,0], [0,0,0]]
def __str__(self):
return (
f"Instance board: {self.board}\n"
f"Class board (shared): {self.shared_board}"
)
def putPiece(self, position1, position2):
self.board[position1][position2] = 1
self.shared_board[position1][position2] = 2
>>> b1 = TicTacToeBoard()
>>> b2 = TicTacToeBoard()
>>> b1.putPiece(1, 2)
>>> print(b1)
Instance board: [[0, 0, 0], [0, 0, 1], [0, 0, 0]]
Class board (shared): [[0, 0, 0], [0, 0, 2], [0, 0, 0]]
>>> print(b2)
Instance board: [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
Class board (shared): [[0, 0, 0], [0, 0, 2], [0, 0, 0]]
請注意第二個 tictactoe 板如何b2沒有一個在 position(1, 2)而是在 position 處有兩個(1, 2)。
添加回答
舉報