""" Создать интерфейс Observer с методом update(event), где event может быть строкой или объектом с типом события ("path_found", "move", "maze_loaded"). """ from enum import Enum from abc import ABC, abstractmethod class MazeEventType(Enum): PATH_FOUND = "path_found" MOVE = "move" MAZE_LOADED = "maze_loaded" class MazeEvent: data=None def __init__(self, evtype: MazeEventType, data=None): if not isinstance(evtype, MazeEventType): raise TypeError(f"evtype must be an EventType, got {type(evtype)}") self.evtype = evtype self.data = data class Observer(ABC): @abstractmethod def update(self, event: MazeEvent): raise NotImplementedError class Subject(ABC): """Издатель: управляет подписчиками и отправляет им уведомления.""" def __init__(self): self._observers:set[Observer] = set() def attach(self, obs:Observer): "Подписать наблюдателя" self._observers.add(obs) def detach(self, obs:Observer): "Отписать наблюдателя" self._observers.discard(obs) def notify(self, event:MazeEvent): for obs in self._observers: obs.update(event)