1

我已经为池控制器编写了一个状态机,但是我正在努力解决文档中关于在我初始化模型时强制 on_enter 方法触发的内容。文档说:

“请注意,on_enter_«state name»第一次初始化机器时不会触发回调。例如,如果您on_enter_A()定义了回调,并使用 初始化机器initial='A'on_enter_A()则在下次进入状态 A 之前不会触发。(如果您需要确保on_enter_A()触发在初始化时,您可以简单地创建一个虚拟初始状态,然后to_A()在方法内部显式调用__init__。)"

但我不确定我需要在哪里调用它......我创建了一个名为 的类Pool_Controller,然后创建一个Pool_Controller像这样的实例

MyController=Pool_Controller

然后我像这样创建状态机

machine = Machine(MyController, states=states, transitions, initial='dummy_state')

我需要将to_initial_state()dummy_state 放在哪里才能立即跳转到我的 initial_state 以便on_enter_initial_state在模型初始化时执行?

4

1 回答 1

1

您需要to_initial_state在控制器(模型)被装饰(添加到机器)之后显式调用。我建议一种方法,首先实例化机器并将其传递给模型的构造函数:

from transitions import Machine

class PoolController:

    def __init__(self, machine):
        machine.add_model(self)
        self.to_initial_state()

# we will add the model later (in the model constructor)
machine = Machine(model=None, states=['dummy_state', 'initial_state'], initial='dummy_state')
controller = PoolController(machine)
assert controller.is_initial_state()
于 2021-04-06T11:10:02.070 回答