maxapi/maxapi/context/state_machine.py

34 lines
1.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

class State:
"""
Представляет отдельное состояние в FSM-группе.
При использовании внутри StatesGroup, автоматически присваивает уникальное имя в формате 'ИмяКласса:имя_поля'.
"""
def __init__(self):
self.name = None
def __set_name__(self, owner, attr_name):
self.name = f'{owner.__name__}:{attr_name}'
def __str__(self):
return self.name
class StatesGroup:
"""
Базовый класс для описания группы состояний FSM.
Атрибуты должны быть экземплярами State. Метод `states()` возвращает список всех состояний в виде строк.
"""
@classmethod
def states(cls) -> list[str]:
"""
Получить список всех состояний в формате 'ИмяКласса:имя_состояния'.
:return: Список строковых представлений состояний
"""
return [str(getattr(cls, attr)) for attr in dir(cls)
if isinstance(getattr(cls, attr), State)]