0
0

【Python】transitionsで状態遷移実装

Last updated at Posted at 2024-08-16

概要

Pythonのパッケージである transitionsで状態遷移処理を実装する際のノウハウを、
サンプルソースを元に記載する。

サンプルソース

from transitions import Machine

# 状態の定義
states = ['A', 'B', 'C']

# 状態遷移の定義
transitions = {'trigger': 'fromAtoB', 'source': 'A', 'dest': 'B'}

# Modelインスタンスの生成
model = Model()

# Machineインスタンスの生成
machine = Machine(model=model, states=states, initial='A', auto_transisitons=False)

# Modelクラスの宣言
class Model(object):
	# 状態Bに遷移した時の処理
	def on_enter_B(self):
		print('State transition to B')

サンプルソースに対する説明

状態の定義

states = ['A', 'B', 'C']

A状態、B状態、C状態を定義している。

状態遷移の定義

transitions = {'trigger': 'fromAtoB', 'source': 'A', 'dest': 'B'}

AからBへの状態遷移を定義している。

フィールド: trigger

状態遷移のトリガーを命名する。
fromAtoB()をコールすることにより、AからBへの状態遷移をトリガーできる。

フィールド: source

遷移前の状態を指定する。
ここではA状態が指定されているため、C状態にて fromAtoB()がコールされたとしても、
C状態からB状態への遷移は行われない。

フィールド: dest

遷移後の状態を指定する。ここではB状態。

フィールド: conditions

遷移が発生するための条件を指定する。
指定された変数、リスト、関数の戻り値がTrueの場合のみ遷移が行われる。

フィールド: unless

遷移が発生しないための条件を指定する。
conditionsフィールドと逆に、 Falseの場合のみの遷移が行われる。

フィールド: before

遷移が発生する前に実行されるコールバック関数を指定する。

フィールド: after

遷移が発生した後に実行されるコールバック関数を指定する。

Modelインスタンスの生成

model = Model()

class Model(object):
	def on_enter_B(self):
		print('State transition to B')	

Machineインスタンスの生成に使用するために、
Modelクラスを宣言してインスタンスを生成している。

on_enter_B()

状態Bへの遷移が発生した後に実行されるコールバック関数。
on_enter_[状態名]()という関数を宣言することで、同様にコールバック関数を追加できる。

Machineインスタンスの生成

machine = Machine(model=model, states=states, initial='A', auto_transisitons=False)

状態遷移を実装するため、Machineインスタンスを生成している。
ここでは、状態遷移実装対象に model, 状態に states, 初期状態にA状態, auto_transitionsFalse が指定されている。

引数: model

型は任意のオブジェクトまたはオブジェクトのリスト。
状態遷移を実装する対象のオブジェクトを指定する。

引数: states

型は状態のリストまたは辞書。
状態遷移で使用する状態を指定する。

引数: transitions

型は状態のリストまたは辞書。
状態遷移を指定する。

引数: initial

型は文字列または stateオブジェクト。
初期状態を指定する。

引数: auto_transitions

型はブール値。
Trueを指定すると、 to_[状態名]()という形式のトリガーが追加される。
デフォルトでは True

引数: ordered_transitions

型はブール値またはリスト。
True を指定すると、状態をリスト順に遷移させるための next_state() が追加される。

引数: before_state_change

型は関数または関数のリスト。
すべての状態遷移が実行される前に呼び出されるコールバック関数を指定する。

引数: after_state_change

型は関数または関数のリスト。
すべての状態遷移が実行された後に呼び出されるコールバック関数を指定する。

引数: send_event

型はブール値。
Trueに設定すると、トリガーが呼び出されたときにEventDataオブジェクトが関数に渡される。
このオブジェクトには、トリガー名、ソース状態、遷移先状態、modelなどの情報が含まれる。

引数: prepare_event

型は関数または関数のリスト。
イベント処理の準備として、遷移が実行される前に呼び出されるコールバック関数を指定する。

引数: finalize_event

型は関数または関数のリスト。
イベント処理の完了として、遷移が実行された後に呼び出されるコールバック関数を指定する。

引数: ignore_invalid_triggers

無効なトリガーが呼び出された場合に、エラーを発生させずに無視するかどうかを指定する。
Trueに設定すると、無効なトリガーはエラーを発生させず、無視される。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0