对于一个状态机,最基本的要素就是状态和事件,所以根据这个思路,我们可以设计一个具备基本功能的状态机。
以看碟片为例,DVD的状态包含:已开机,正在播放,正在暂停,已关机。而触发这些状态的事件有:遥控开机,遥控播放,遥控暂停,遥控关机。所以画一个状态转换表如下:

首先,设计状态基类。
class FsmState:
def enter(self, event, fsm): ## 参数event为触发状态转换的事件, fsm则为状态所在状态机
pass
def exit(self, fsm):
pass
FsmState将是我们这个状态机所有状态的基类。enter函数用于执行进入该状态的操作,exit函数用于执行离开该状态的操作。
然后我们将例子中的四个状态转换为代码:
class DvdPowerOn(FsmState):
def enter(self, event, fsm):
print("dvd is power on")
class DvdPlaying(FsmState):
def enter(self, event, fsm):
print("dvd is going to play")
def exit(self, fsm):
print("dvd stoped play")
class DvdPausing(FsmState):
def enter(self, event, fsm):
print("dvd is going to pause")
def exit(self, fsm):
print("dvd stopped pause")
class DvdPowerOff(FsmState):
de


5148

被折叠的 条评论
为什么被折叠?



