Приветствую! В сегодняшней статье рассмотрим машину состояний (state machine) в Python — мощный инструмент для упрощения и структурирования процессов с многократными переходами между этапами. Такая модель используется повсеместно: от управления интерфейсом до проектирования игр и других сложных систем. Что такое маш...

Машина состояний на Python

Приветствую! В сегодняшней статье рассмотрим машину состояний (state machine) в Python — мощный инструмент для упрощения и структурирования процессов с многократными переходами между этапами. Такая модель используется повсеместно: от управления интерфейсом до проектирования игр и других сложных систем.

Что такое машина состояний?

Машина состояний — это модель, в которой объект или процесс может находиться в одном из нескольких состояний и переключаться между ними по заданным правилам. Она помогает не просто организовать код, а ещё и сделать его более читаемым и управляемым.

Основные элементы машины состояний:

  1. Состояния (States) — определяют, на каком этапе находится объект или процесс.
  2. Переходы (Transitions) — описывают, как можно перемещаться между состояниями.
  3. События (Events) — внешние или внутренние триггеры, запускающие переходы.
  4. Действия (Actions) — код, который выполняется при переходе или в конкретном состоянии.

Зачем использовать машину состояний?

Когда процесс требует контроля за последовательностью выполнения и частыми переключениями между состояниями, машина состояний позволяет: - Упорядочить логику и отделить разные этапы, делая код более читаемым. - Избежать ошибок за счёт чётко заданных правил переходов. - Упростить отладку — легче находить ошибки, так как каждый переход и состояние явно определены.

Пример машины состояний на Python

Представим простой пример — светофор, у которого есть три состояния: красный, жёлтый и зелёный. Машина состояний позволит легко управлять этими состояниями, задавая правила их переключения.

from statemachine import State, StateMachine

class TrafficLightMachine(StateMachine):
    # Задаём состояния светофора
    red = State('Красный', initial=True)
    yellow = State('Жёлтый')
    green = State('Зелёный')

    # Определяем переходы между состояниями
    switch_to_yellow = red.to(yellow)
    switch_to_green = yellow.to(green)
    switch_to_red = green.to(red)

# Создаём объект светофора
traffic_light = TrafficLightMachine()

# Демонстрация работы
print(f"Начальное состояние: {traffic_light.current_state}")

traffic_light.switch_to_yellow()
print(f"После перехода: {traffic_light.current_state}")

traffic_light.switch_to_green()
print(f"После перехода: {traffic_light.current_state}")

traffic_light.switch_to_red()
print(f"После перехода: {traffic_light.current_state}")

Вывод:

Начальное состояние: Красный
После перехода: Жёлтый
После перехода: Зелёный
После перехода: Красный