mari_an_shum
@mari_an_shum
Компьютерный лингвист

Почему не удается присоединить к переходу коллбэки?

Доброго дня!

Продолжаю изучать 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
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы