python 状态机教程_python 实用工具状态机transitions
說明
1. 狀態機是一個非常實用的理論。在涉及到復雜的場景,建立狀態機模型,能帶來極大的方便。比如,網絡連接、模型狀態、業務邏輯。
2. 狀態機并不復雜, 重要的是它的思想,能夠極大減輕復雜度。使用時關鍵在于定義好事件和動作。
基本概念
State: 狀態
Event: 事件. 事件觸發狀態變換
Action: 動作. event發生前或后執行的動作
transition: 變換. 狀態變換
github
https://github.com/pytransitions/transitions
安裝
pip install transitions
簡單示例
# 連接協議狀態機
from transitions.extensions import HierarchicalMachine as Machine
from transitions.extensions.nesting import NestedState
class ConnectionStateMachine:
"""Connection state machine."""
def __init__(self, callbacks=None):
"""
:param callbacks: callbacks for the state machine
"""
self.callbacks = {}
# 定義狀態
self.states = ["STATE_NOT_CONNECTED",
{
"name": "STATE_CONNECTED",?? # 狀態名
"on_enter": self._on_enter_CONNECTED,? # 進入狀態觸發
"on_exit": self._on_exit_CONNECTED,??? # 退出狀態觸發
"children": [???? # 狀態嵌套
"STATE_NOT_SELECTED",
{
"name": "STATE_SELECTED",
"on_enter": self._on_enter_CONNECTED_SELECTED
}
]
}]
# transition 1
self.machine = Machine(model=self, states=self.states, initial="STATE_NOT_CONNECTED", auto_transitions=False)
if callbacks:
self.callbacks = callbacks
# 定義狀態變換
self.machine.add_transition("connect", "STATE_NOT_CONNECTED", "STATE_CONNECTED_NOT_SELECTED")? # transition 2
self.machine.add_transition("disconnect", "STATE_CONNECTED", "STATE_NOT_CONNECTED")? # transition 3
self.machine.add_transition("select", "STATE_CONNECTED_NOT_SELECTED", "STATE_CONNECTED_SELECTED")? # transition 4
self.machine.add_transition("deselect", "STATE_CONNECTED_SELECTED", "STATE_CONNECTED_NOT_SELECTED")? # transition 5
self.machine.add_transition("timeoutT7", "STATE_CONNECTED_NOT_SELECTED", "STATE_NOT_CONNECTED")? # transition 6
# 事件觸發的動作
def _on_enter_CONNECTED(self):
if "on_enter_CONNECTED" in self.callbacks:
self.callbacks["on_enter_CONNECTED"]()
def _on_exit_CONNECTED(self):
if "on_exit_CONNECTED" in self.callbacks:
self.callbacks["on_exit_CONNECTED"]()
def _on_enter_CONNECTED_SELECTED(self):
if "on_enter_CONNECTED_SELECTED" in self.callbacks:
self.callbacks["on_enter_CONNECTED_SELECTED"]()
定義狀態機
# 一般都是兩種:不嵌套、嵌套
from transitions import Machine?? #不嵌套
from transitions.extensions import HierarchicalMachine as Machine # 嵌套
# 檢查狀態
machine.state
machine.is_()
定義狀態
# 狀態可以是三種類型: 對象、字符串、字典
from transitions import State
states = [
State(name="solid"),??? # 對象
"liquid",?????????????? # 字符串
{"name": "gas"}???????? # 字典
]
定義變換
# 定義函數
machine.add_transition(trigger, source, dest, )
trigger(str)???????? 方法名,觸發狀態轉換
source(str or list)? 源狀態
dest(str)??????????? 目標狀態
# 加上變換
machine.add_transition(trigger="wake_up", source="asleep", dest="hanging out")
machine.add_transition("work_out", "hanging out", "hungry")
machine.add_transition("nap", "*", "asleep")?? # 從任意狀態變為asleep
以上就是python 實用工具狀態機transitions的詳細內容,更多關于python transitions的資料請關注云海天教程其它相關文章!
原文鏈接:http://yongqing.is-programmer.com/posts/215592.html
總結
以上是生活随笔為你收集整理的python 状态机教程_python 实用工具状态机transitions的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python对象点方法_python对象
- 下一篇: python两条曲线图片相似度_Pyth