Есть много ответов о том, что это нецелесообразно, но я нашел сценарий, в котором, на мой взгляд, он полезен.Пожалуйста, поправьте меня, если я ошибаюсь, и есть лучший способ.
Я строю игру в шахматы, где отдельные фигуры наследуются от суперкласса Chesspiece
:
class ChessPiece:
def __init__(self, pos, color, num, piece):
...
Каждая фигураесть метод, который определяет ходы, которые он может предпринять:
class Knight(ChessPiece):
def __init__(self, pos, color=None, num=''):
ChessPiece.__init__(self, pos, color, num, self.__class__.__name__)
def possible_moves(self):
pos_moves = []
# Up, Right (1 space, 2 spaces)
try:
if 1 <= self.x + 2 <= len(Config.board) and 1 <= self.y - 1 <= len(Config.board):
if Config.board[self.x + 2][self.y - 1] == '___':
pos_moves.append(f'{Config.tile_convert(self.x + 2)}{Config.tile_convert(self.y - 1, True)}')
except Exception: pass
#Up, Left
...
return pos_moves
Я бы хотел реализовать функцию move()
.Код для функции move()
будет одинаковым для каждой фигуры, за исключением того факта, что он должен сравнивать предложенный ход с возможными ходами, которые варьируются для каждой фигуры.Я мог бы сделать move()
функцию для каждого куска, но это было бы просто повторять код 6 раз.
Итак, я хотел бы определить move()
в Chesspiece
и ссылаться на possible_moves()
каждого кускафункция.