Python 类:附加列表并合并方法
Python Classes: Appending a list & Incorporating a Method
我今天才开始学习 Python classes,我有一个简短的问题。我很惊讶它使我的代码变得如此简洁,但我试图弄清楚以下是否适用于我正在处理的国际象棋问题。
(1) 我可以从 class 方法中以某种方式附加一个列表吗? 我想知道每次调用 capture 时是否有办法将片段累积到列表中。
(2) 如何从 class 中调用一个方法以用于另一个方法? 我希望能够在继续之前检查移动是否有效,如果棋子应该尝试捕获另一个或移动。
class Piece(Board):
def __init__(self, piece, r, c):
self.piece = piece
self.r = r
self.c = c
这是我想合并到下面的函数中以避免冗余的函数(问题 2)
def valid_move(self,r,c,r_offset,c_offset):
#r, c are integers for the coordinates on the board
#r_offset,c_offset are the cells the piece might move to
self.tgt_r, self.tgt_c = r+r_offset, c+c_offset
if self.tgt_r <= 7 or self.tgt_c >= 0:
return True
return False
目前这些功能都是一样的。我正在尝试了解如何使用捕获功能在拍摄后收集作品列表。 (问题 1)
def capture(self,r,c, r_offset, c_offset):
piece = self.piece
self.tgt_r, self.tgt_c = r+r_offset, c+c_offset
if self.tgt_r > 7 or self.tgt_c < 0:
return None
else:
nb = Board(curr).copy_board() #this board is just 8x8 np.array
nb[self.tgt_r,self.tgt_c], nb[r,c] = piece,'-'
return nb
def move(self,r,c, r_offset, c_offset):
piece = self.piece
self.tgt_r, self.tgt_c = r+r_offset, c+c_offset
if self.tgt_r > 7 or self.tgt_c < 0:
return None
else:
nb = Board(curr).copy_board()
nb[self.tgt_r,self.tgt_c], nb[r,c] = piece,'-'
return nb
一如既往的感谢。
1.我可以从 class 方法中以某种方式附加列表吗?
在您的 class 中创建一个 list
-piecesList
用于存储碎片:
class Piece(Board):
def __init__(self, piece, r, c):
self.piece = piece
self.r = r
self.c = c
self.piecesList = [] #or init using some argument if you want to use some list from outside of the class
并且每当您的 capture
方法被调用时,只需将片段附加到 piecesList
:
def capture(self,r,c, r_offset, c_offset):
self.piecesList.append(self.piece)
piece = self.piece
2。如何从 class 中调用一个方法以在另一个方法中使用?
您可以简单地使用 self.method(arg1, arg2...)
调用它:
def capture(self,r,c, r_offset, c_offset):
piece = self.piece
if self.valid_move(r,c,r_offset,c_offset) == False:
return None
else:
nb = Board(curr).copy_board() #this board is just 8x8 np.array
nb[self.tgt_r,self.tgt_c], nb[r,c] = piece,'-'
return nb
我今天才开始学习 Python classes,我有一个简短的问题。我很惊讶它使我的代码变得如此简洁,但我试图弄清楚以下是否适用于我正在处理的国际象棋问题。
(1) 我可以从 class 方法中以某种方式附加一个列表吗? 我想知道每次调用 capture 时是否有办法将片段累积到列表中。
(2) 如何从 class 中调用一个方法以用于另一个方法? 我希望能够在继续之前检查移动是否有效,如果棋子应该尝试捕获另一个或移动。
class Piece(Board):
def __init__(self, piece, r, c):
self.piece = piece
self.r = r
self.c = c
这是我想合并到下面的函数中以避免冗余的函数(问题 2)
def valid_move(self,r,c,r_offset,c_offset):
#r, c are integers for the coordinates on the board
#r_offset,c_offset are the cells the piece might move to
self.tgt_r, self.tgt_c = r+r_offset, c+c_offset
if self.tgt_r <= 7 or self.tgt_c >= 0:
return True
return False
目前这些功能都是一样的。我正在尝试了解如何使用捕获功能在拍摄后收集作品列表。 (问题 1)
def capture(self,r,c, r_offset, c_offset):
piece = self.piece
self.tgt_r, self.tgt_c = r+r_offset, c+c_offset
if self.tgt_r > 7 or self.tgt_c < 0:
return None
else:
nb = Board(curr).copy_board() #this board is just 8x8 np.array
nb[self.tgt_r,self.tgt_c], nb[r,c] = piece,'-'
return nb
def move(self,r,c, r_offset, c_offset):
piece = self.piece
self.tgt_r, self.tgt_c = r+r_offset, c+c_offset
if self.tgt_r > 7 or self.tgt_c < 0:
return None
else:
nb = Board(curr).copy_board()
nb[self.tgt_r,self.tgt_c], nb[r,c] = piece,'-'
return nb
一如既往的感谢。
1.我可以从 class 方法中以某种方式附加列表吗?
在您的 class 中创建一个 list
-piecesList
用于存储碎片:
class Piece(Board):
def __init__(self, piece, r, c):
self.piece = piece
self.r = r
self.c = c
self.piecesList = [] #or init using some argument if you want to use some list from outside of the class
并且每当您的 capture
方法被调用时,只需将片段附加到 piecesList
:
def capture(self,r,c, r_offset, c_offset):
self.piecesList.append(self.piece)
piece = self.piece
2。如何从 class 中调用一个方法以在另一个方法中使用?
您可以简单地使用 self.method(arg1, arg2...)
调用它:
def capture(self,r,c, r_offset, c_offset):
piece = self.piece
if self.valid_move(r,c,r_offset,c_offset) == False:
return None
else:
nb = Board(curr).copy_board() #this board is just 8x8 np.array
nb[self.tgt_r,self.tgt_c], nb[r,c] = piece,'-'
return nb