您好,登錄后才能下訂單哦!
transitions狀態(tài)機(jī)如何在python中使用?相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
說明
1. 狀態(tài)機(jī)是一個非常實(shí)用的理論。在涉及到復(fù)雜的場景,建立狀態(tài)機(jī)模型,能帶來極大的方便。比如,網(wǎng)絡(luò)連接、模型狀態(tài)、業(yè)務(wù)邏輯。
2. 狀態(tài)機(jī)并不復(fù)雜, 重要的是它的思想,能夠極大減輕復(fù)雜度。使用時關(guān)鍵在于定義好事件和動作。
基本概念
pip install transitions
簡單示例
# 連接協(xié)議狀態(tài)機(jī) 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 = {} # 定義狀態(tài) self.states = ["STATE_NOT_CONNECTED", { 'name': "STATE_CONNECTED", # 狀態(tài)名 'on_enter': self._on_enter_CONNECTED, # 進(jìn)入狀態(tài)觸發(fā) 'on_exit': self._on_exit_CONNECTED, # 退出狀態(tài)觸發(fā) 'children': [ # 狀態(tài)嵌套 "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 # 定義狀態(tài)變換 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 # 事件觸發(fā)的動作 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"]()
定義狀態(tài)機(jī)
# 一般都是兩種:不嵌套、嵌套 from transitions import Machine #不嵌套 from transitions.extensions import HierarchicalMachine as Machine # 嵌套 # 檢查狀態(tài) machine.state machine.is_<state_name>()
定義狀態(tài)
# 狀態(tài)可以是三種類型: 對象、字符串、字典 from transitions import State states = [ State(name="solid"), # 對象 "liquid", # 字符串 {"name": "gas"} # 字典 ]
定義變換
# 定義函數(shù) machine.add_transition(trigger, source, dest, ) trigger(str) 方法名,觸發(fā)狀態(tài)轉(zhuǎn)換 source(str or list) 源狀態(tài) dest(str) 目標(biāo)狀態(tài) # 加上變換 machine.add_transition(trigger="wake_up", source="asleep", dest="hanging out") machine.add_transition('work_out', 'hanging out', 'hungry') machine.add_transition('nap', '*', 'asleep') # 從任意狀態(tài)變?yōu)閍sleep
看完上述內(nèi)容,你們掌握transitions狀態(tài)機(jī)如何在python中使用的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。