Доброго дня!
Продолжаю изучать statetransitions, библиотеку для создания ФСМ. Осуществлять переходы между состояниями и группировать их под единым именем мне уже удается, однако возникает проблема с подключением коллбэков: необходимо, чтобы при осуществлении перехода lexeme_and_meta_received срабатывала функция on_enter_wf_tag (выводит соответствующий отладочный принт и делает изменения в словаре объекта). Что было сделано:
- Явное указание функции в качестве kwarg'а в описании перехода: в качестве функции on (= осуществлять во время перехода) и after (= осуществить после перехода),
- Неявное присоединение функции к переходу с помощью ее названия: была сделана попытка начать название функции с after,
- Неявное присоединение функции к состоянию: состояние, в которое надо перейти, называется wf_tag, соответственно прикрепленный к нему коллбэк называется on_enter_wf_tag.
Ни один из перечисленных методов не дал результатов. Подскажите, пожалуйста, что еще стоит попробовать сделать?
Заранее спасибо! Код прилагаю.
from statemachine import StateMachine, State
class TestState(StateMachine):
wf_lexeme_and_meta = State(initial=True)
wf_tag = State()
wf_meaning_and_exp = State()
wf_sem_class = State()
lexeme_and_meta_received = wf_lexeme_and_meta.to(wf_tag)
tag_received = wf_tag.to(wf_meaning_and_exp)
meaning_and_exp_received = wf_meaning_and_exp.to(wf_sem_class)
sem_class_received = wf_sem_class.to(wf_lexeme_and_meta)
proceed = lexeme_and_meta_received | tag_received | meaning_and_exp_received | sem_class_received
def __init__(self):
self.working_span = ""
self.working_memory = {
"lemma": "",
"meta": "",
"tag": "",
"meaning": "",
"exp": "",
"sem class": ""
}
super().__init__()
def before_proceed(self, span):
self.working_span = span
def on_enter_wf_tag(self):
print("Получено значение:" + self.working_span)
working_memory["lemma"] = self.working_span
working_memory["meta"] = input("Введите мета-информацию о слове")
test_state = TestState()
print(test_state.current_state.name)
while True:
span = input()
test_state.proceed(span)
print(test_state.working_span)
print(test_state.working_memory)
print(test_state.current_state.name)
if span == "finish":
break