# OBSERVER он же наблюдатель ```python # собсна говоря наш наблюдатель class Observer: # список подписчиков которых нужно оповестить _list_observers = [] @classmethod def add_observer(cls, value): cls._list_observers.append(value) @classmethod def del_observer(cls, value): del cls._list_observers[cls._list_observers.index(value)] # метод который дергается у источника # после чего идет перебор подписчиков # и вызов каких-либо действий на их стороне @classmethod def update(cls, value): for observer in cls._list_observers: observer.change_health(value) # первый подписчик class ViewHealth(): def __init__(self, observer): observer.add_observer(self) def view_healf(self, value): print("view 1:", value) # обязательный метод который нужен наблюдателю аля интерфейс def change_health(self, value): self.view_healf(value) # второй подписчик class ViewHealth_2(): def __init__(self, observer): observer.add_observer(self) def view_healf(self, value): print("view 2:", value) def change_health(self, value): self.view_healf(value) # третьий подписчик class ViewHealth_3(): def __init__(self, observer): observer.add_observer(self) def view_healf(self, value): print("view 3:", value) def change_health(self, value): self.view_healf(value) # класс источник class Health(Observer): def __init__(self): self.health = 10 super(Observer, self).__init__() # дергаем у него обновление значения и запускаем событие # у наблюдателя что алярма значение поменялось def update(self, value): self.health += value super().update(self.health) if __name__ == '__main__': # инитим класс источник health = Health() # регаем подписчиков # ! реализация так себе чисто для примера ! # в оригинале это должно быть в динамике ViewHealth(Observer) ViewHealth_2(Observer) ViewHealth_3(Observer) # запускаем беск цикл # где обновляем значение # класса источника и смотрим на магию while True: val = int(input("enter new health: ")) health.update(val) ``` output: ```bash! PS E:\DEV\python\mapper_med> python .\main_3.py enter new health: 10 view 1: 20 view 2: 20 view 3: 20 enter new health: 20 view 1: 40 view 2: 40 view 3: 40 ... ```