Python state-machine design

后端 未结 12 2144
予麋鹿
予麋鹿 2020-11-30 17:36

Related to this Stack Overflow question (C state-machine design), could you Stack Overflow folks share your Python state-machine design techniques

12条回答
  •  夕颜
    夕颜 (楼主)
    2020-11-30 18:21

    I also was not happy with the current options for state_machines so I wrote the state_machine library.

    You can install it by pip install state_machine and use it like so:

    @acts_as_state_machine
    class Person():
        name = 'Billy'
    
        sleeping = State(initial=True)
        running = State()
        cleaning = State()
    
        run = Event(from_states=sleeping, to_state=running)
        cleanup = Event(from_states=running, to_state=cleaning)
        sleep = Event(from_states=(running, cleaning), to_state=sleeping)
    
        @before('sleep')
        def do_one_thing(self):
            print "{} is sleepy".format(self.name)
    
        @before('sleep')
        def do_another_thing(self):
            print "{} is REALLY sleepy".format(self.name)
    
        @after('sleep')
        def snore(self):
            print "Zzzzzzzzzzzz"
    
        @after('sleep')
        def big_snore(self):
            print "Zzzzzzzzzzzzzzzzzzzzzz"
    
    person = Person()
    print person.current_state == person.sleeping       # True
    print person.is_sleeping                            # True
    print person.is_running                             # False
    person.run()
    print person.is_running                             # True
    person.sleep()
    
    # Billy is sleepy
    # Billy is REALLY sleepy
    # Zzzzzzzzzzzz
    # Zzzzzzzzzzzzzzzzzzzzzz
    
    print person.is_sleeping                            # True
    

提交回复
热议问题