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