python 유틸리티 상태기 전환

설명
1. 상태기는 매우 실용적인 이론이다.복잡한 장면과 관련되어 상태기 모델을 구축하면 매우 큰 편의를 가져올 수 있다.예를 들어 네트워크 연결, 모델 상태, 업무 논리. 
2. 상태기는 복잡하지 않다. 중요한 것은 그의 사상이다. 복잡도를 크게 줄일 수 있다.사용 시 관건은 이벤트와 동작을 잘 정의하는 데 있다. 
기본 개념
  • 상태: 상태
  • 이벤트: 이벤트.이벤트 트리거 상태 변환
  • 액션: 액션.이벤트가 발생하기 전이나 후에 실행되는 동작입니다
  • 전환: 변환.상태 변환
  • 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_<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에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!

    좋은 웹페이지 즐겨찾기