私はpytransitions/transitionモジュールを使用しており、いくつかの階層的な状態マシンを構築しようとしています。階層的状態マシン:ネストされたマシンコールの親メソッドのon_enter
以下のスニペットでは、1つの入れ子状態から別の入れ子状態への移行を開始しています。
問題は、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を取得しています。
理論上私はトップマシンでコールバックを持つことができますが、私は自分の状態とコールバックをネストされたマシンの明確に定義された境界に保つことをお勧めします。
どのようにそれを達成するためのアイデアですか?関連Githubのissueから