In [1]:
class Matter(object):
    pass

lump = Matter()

In [21]:
from transitions import Machine, State

In [9]:
states = ['solid','liquid','gas','plasma']
transitions = [
    { 'trigger': 'melt', 'source': 'solid', 'dest': 'liquid' },
    { 'trigger': 'evaporate', 'source': 'liquid', 'dest': 'gas' },
    { 'trigger': 'sublimate', 'source': 'solid', 'dest': 'gas' },
    { 'trigger': 'ionize', 'source': 'gas', 'dest': 'plasma' }
]

In [19]:
machine = Machine(model = lump, states = states, transitions=transitions, initial='liquid')
print (lump.state)
lump.evaporate()
print (lump.state)
lump.ionize()
print (lump.state)


liquid
gas
plasma

In [22]:
class Matter(object):
    def say_hello(self): 
        print("hello, new state!")
    def say_goodbye(self): 
        print("goodbye, old state!")
        
lump = Matter()

states = [
    State(name='solid', on_exit=['say_goodbye']),
    'liquid',
    { 'name': 'gas' }
    ]

machine = Machine(lump, states=states)
machine.add_transition('sublimate', 'solid', 'gas')

machine.on_enter_gas('say_hello')
machine.set_state('solid')
lump.sublimate()


goodbye, old state!
hello, new state!
Out[22]:
True