Исходный код EJIO.ctk_extender.state.model
## /ctk_extender/state/model.py
from typing import Any
from ..event import EventController
from .events import StateChangedEvent
__all__ = [
'ReactiveModel',
]
[документация]
class ReactiveModel:
"""
Базовый класс-миксин для создания реактивных моделей и датаклассов.
Любая модификация атрибутов автоматически генерирует StateChangedEvent.
"""
__slots__ = ()
def __setattr__(self, name: str, value: Any) -> None:
# Проверяем, изменилось ли значение на самом деле
old_value = getattr(self, name, None)
super().__setattr__(name, value)
if old_value != value and not name.startswith('_'):
# Оповещаем систему, что модель изменилась
EventController.emit(StateChangedEvent(self, self))