Снимок - паттерн позволяет сохранять и восстанавливать предыдущие состояния объектов без раскрытия деталей реализации.
Стоит использовать когда нужно сохранять состояния объектов для возможного восстановления, когда прямое получение нарушает инкапсуляцию, для реализации функционала отмены операций.
`class GameCharacter: def init(self): self.x = 0 self.y = 0 self._health = 100
def move(self, x: int, y: int): self.x += x self.y += y
def take_damage(self, damage: int): self._health -= damage
def save(self) -> 'CharacterMemento': return CharacterMemento(self.x, self.y, self._health)
def restore(self, memento: 'CharacterMemento'): self.x = memento.x self.y = memento.y self._health = memento.health
def str(self): return f"Position: ({self.x}, {self.y}), Health: {self._health}"
class CharacterMemento: def init(self, x: int, y: int, health: int): self.x = x self.y = y self.health = health
class GameSaveManager: def init(self): self._saves = []
def save_game(self, memento: CharacterMemento): self._saves.append(memento)
def load_last_save(self) -> CharacterMemento: if self.saves: return self.saves[-1] raise ValueError("No saves available")
#Использованиеhero = GameCharacter() save_manager = GameSaveManager()
hero.move(5, 3) hero.take_damage(10) save_manager.save_game(hero.save()) # Сохраняем состояние print(hero) # Position: (5, 3), Health: 90
hero.move(2, 1) hero.take_damage(30) print(hero) # Position: (7, 4), Health: 60
#Загружаем сохранениеhero.restore(save_manager.load_last_save()) print(hero) # Position: (5, 3), Health: 90 #weekofpatterns`