Снимок - паттерн позволяет сохранять и восстанавливать предыдущие состояния объектов без раскрытия деталей реализации.

Стоит использовать когда нужно сохранять состояния объектов для возможного восстановления, когда прямое получение нарушает инкапсуляцию, для реализации функционала отмены операций.

`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`