python 유틸리티 상태기 전환
4440 단어 pythontransitions도구상태기
1. 상태기는 매우 실용적인 이론이다.복잡한 장면과 관련되어 상태기 모델을 구축하면 매우 큰 편의를 가져올 수 있다.예를 들어 네트워크 연결, 모델 상태, 업무 논리.
2. 상태기는 복잡하지 않다. 중요한 것은 그의 사상이다. 복잡도를 크게 줄일 수 있다.사용 시 관건은 이벤트와 동작을 잘 정의하는 데 있다.
기본 개념
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_<state_name>()
상태 정의
# : 、 、
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의 상세한 내용입니다.pythontransitions에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.