我已经为池控制器编写了一台状态机,但是在文档中提到的关于在初始化模型时强迫on_enter方法启动的东西让我感到很困难。文件上说:
“请注意,当机器首次初始化时,
on_enter_«state name»回调不会触发。例如,如果定义了on_enter_A()回调,并使用initial='A'初始化机器,则在下次进入状态A之前不会触发on_enter_A()(如果需要确保on_enter_A()在初始化时触发,则只需创建一个虚拟初始状态,然后在__init__方法中显式调用to_A())。”
但是我不知道我需要在哪里调用它.我创建了一个名为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会执行?
发布于 2021-04-06 11:10:02
在对控制器(模型)进行修饰(添加到机器上)之后,您需要显式调用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()https://stackoverflow.com/questions/62077740
复制相似问题