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