状态机是一种行为模型,它定义对象如何响应事件。在Python中,状态机通常实现为有限状态机(FSM)。FSM是一种数学计算模型,可用于设计数字逻辑电路和计算机程序。它由一组状态,及状态之间的转换以及发生转换时执行的操作组成。
有限状态机(FSM)可以表示为有向图,状态表示为节点,转换表示为边。边缘标有触发转换的事件,并且动作与边缘相关联。
状态机的动态属性
当我们创建状态机时,模块会为该机器中存在的每个状态创建一组特殊的属性。我们可以使用实例和属性检查该属性是否适用于该状态。
用Python编写一个通用的有限状态机
class StateMachine: def __init__(self): self.handlers={} self.startState=None self.endStates=[] def add_state(self,name,handler,end_state=0): name=name.upper() self.handlers[name]=handler if end_state: self.endStates.append(name) def set_start(self,name): self.startState=name.upper() def run(self,cargo): try: handler=self.handlers[self.startState] except: raise InitializationError("must call.set_start()before.run()") if not self.endStates: raise InitializationError("at least one state must be an end_state") while True: (newState,cargo)=handler(cargo) if newState.upper()in self.endStates: print("reached",newState) break else: handler=self.handlers[newState.upper()]