首页 > 解决方案 > 当状态值相互重叠时,在 python 中处理状态机中的转换

问题描述

我有大量状态,这些状态对应于不同状态机中的数字

A_STATE_IDLE = 0
A_STATE_ENGAGE = 1
A_STATE_STOP = 2
A_STATE_STOPPED = 3
B_STATE_IDLE = 0
B_STATE_START = 1
B_STATE_RUNNING = 2
B_STATE_SUCCESS = 3
B_STATE_FAIL = 4
B_STATE_STOP = 5

我还列出了状态机的不同转换。

"trigger": press_start
"from": A_STATE_IDLE
"to": A_STATE_START

"trigger": press_start
"from": B_STATE_IDLE
"to": B_STATE_START

我应该如何处理状态的转换,是否可以在不将状态放入例如字典的情况下做到这一点?

最好我想以其中一种方式处理我的过渡。

press_start(A_STATE_IDLE) => A_STATE_START

A_STATE_IDLE.press_start() => A_STATE_START

在尝试实现这一点时,我遇到了重叠状态值的问题,因为 python 无法区分状态,例如

 A_STATE_STOPPED == B_STATE_SUCCESS

标签: pythonstatestate-machine

解决方案


推荐阅读