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

Почему возникает исключение AttributeError при запросе текущего состояния FSM?

Доброго времени суток!

Осваиваю библиотеку statemachine. Хочу, чтобы после ввода слова-команды мне выдавалось текущее состояние конечного автомата, но в ответ получаю трейсбек с исключением 'TestState' object has no attribute 'model'. Иду в документацию, читаю методы класса StateMachine и не вижу, чтобы для того, чтобы метод current_state стал доступным, объекту надо назначать атрибут model. Кроме того, в документации есть страница, посвященная Model, и там сообщается, что так называемые Domain Models являются необязательными атрибутами. Наконец, в примерах на заглавной странице документации совершенно спокойно запрашивается current_state без какого-либо определения model.
Подскажите, пожалуйста, чего я здесь не понимаю? Код прилагаю.
from statemachine import StateMachine, State

class TestState(StateMachine):

    begin = State(initial=True)
    state_1 = State()
    state_2 = State()
    state_3 = State()
    final = State(final=True)

    to_state_1 = begin.to(state_1, event="go_right", before="went_right")
    to_state_2 = begin.to(state_2)
    to_state_3 = begin.to(state_3)
    to_final = (
        state_1.to(final),
        state_2.to(final),
        state_3.to(final)
    )

    def __init__(self):
        self.command = ""

    def go_right(self, command):
        return command == "направо"
    
    def went_right(self):
        print("Направо пойдешь — коня потеряешь.")

test_state = TestState()
test_state.command = input()
print(test_state.command)
test_state.current_state_value


Также прилагаю трейсбек:
Traceback (most recent call last):
  File "c:\Users\Марина\Documents\Универ\работа дунганский\project\test.py", line 33, in <module>
    test_state.current_state_value
  File "C:\Users\Марина\lib\site-packages\statemachine\statemachine.py", line 207, in current_state_value
    value = getattr(self.model, self.state_field, None)
AttributeError: 'TestState' object has no attribute 'model'
  • Вопрос задан
  • 49 просмотров
Решения вопроса 1
Maksim_64
@Maksim_64
Data Analyst
добавь в конструктор класса super().__init__() Что бы инициализировать атрибуты родительского класса.
def __init__(self):
    self.command = ""
    super().__init__()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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