我正在使用pytransitions/transitions模塊並嘗試構建一些分層狀態機。分層狀態機:on_enter在嵌套機上調用父方法
在下面的代碼片段中,我觸發了從一個嵌套狀態到另一個狀態的轉換。
問題是,如果我將on_enter回調附加到目標嵌套狀態,庫正在父機器中搜索此回調。
from transitions.extensions import HierarchicalMachine as Machine
from transitions.extensions.nesting import NestedState as State
class Nested(Machine):
def print_msg(self):
print("Nested")
def __init__(self):
self.states = ['n1', {'name':'n2', 'on_enter':'print_msg'}]
Machine.__init__(self, states=self.states, initial='n1')
self.add_transition(trigger='goto_n2',
source='*',
dest='n2')
class Top(Machine):
def print_msg(self):
print("Top")
def __init__(self):
self.nested = Nested()
self.states = [ 't1',
{'name': 't2',
'children': self.nested}]
Machine.__init__(self, states=self.states, initial='t1')
self.add_transition(trigger='goto_t2',
source='*',
dest='t2_n1')
top_machine = Top()
top_machine.goto_t2()
top_machine.goto_n2()
腳本的輸出是「頂級」
如果我從頂級刪除print_msg(),然後我得到AttributeError的。
雖然理論上我可以在頂級機器中進行回調,但我肯定會更喜歡將我的狀態和回調保存在嵌套機器的明確界限中。
任何想法如何實現它?