假设我有以下代码:
我们当前的界面允许客户通过说明所需的目标状态来更改实例的状态,此时我们运行某些验证检查,然后选择适当的方法。理想情况下,我希望保留一个字典映射所需的目标状态到正确的方法,以避免大量且无意义的if语句块。例如:
有什么想法吗?
IDLE = 0
STARTED = 1
STOPPED = 2
ERRORED = 3
# additional states as needed
class StateMachine:
def __init__(self)
self.state = IDLE
def start(self):
self.state = STARTED
# do something
def stop(self):
self.state = STOPPED
# do something
def reset(self):
self.state = IDLE
# do something
我们当前的界面允许客户通过说明所需的目标状态来更改实例的状态,此时我们运行某些验证检查,然后选择适当的方法。理想情况下,我希望保留一个字典映射所需的目标状态到正确的方法,以避免大量且无意义的if语句块。例如:
if target_state = STARTED:
instance.start()
elif target_state = STOPPED:
instance.stop()
...
但我不确定以下解决方案是否被认为是良好的实践(使用实例作为参数从类中调用方法感觉有点奇怪)。
state_mapping = {
IDLE: StateMachine.reset,
STARTED: StateMachine.start,
....
}
然后使用以下方式进行调用:
action = state_mapping[target_state]
action(instance)
....
有什么想法吗?
lambda
表达式吗? - Alon Alexanderif
elif
elif
else
的解决方案更易读 - 即使有点无聊。 - ChickenFeetself.__class__ = StateMachineStopped
这样的方式在不同状态之间切换。请参见https://dev59.com/zWYr5IYBdhLWcg3w7uZx#24463654作为示例。 - JL Peyret