from abc import ABC, abstractmethod from models import Cell, Player class Command(ABC): @abstractmethod def execute(self) -> None: pass @abstractmethod def undo(self) -> None: pass class MoveCommand(Command): def __init__(self, player: Player, new_cell: Cell): self._player = player self._new_cell = new_cell self._old_cell = player.current_cell def execute(self) -> None: self._player.move_to(self._new_cell) def undo(self) -> None: self._player.move_to(self._old_cell)