state machine and a global variable

Bruno Desthuilliers bdesth.quelquechose at free.quelquepart.fr
Fri Dec 14 17:06:28 EST 2007


tuom.larsen at gmail.com a écrit :
> Dear list,
> I'm writing very simple state machine library, like this:
> 
> 
> 
> _state = None
> 
> def set_state(state):
>     global _state
>     _state = state
> 
> def get_state():
>     print _surface
> 

NameError here !-)

> 
> but I hate to use global variable.

<aol />

> So, please, is there a better way
> of doing this? All I want is that a user has to type as little as
> possible, like:
> 
> from state_machine import *
> set_state(3)
> get_state()
> 
> I.e., nothing like:
> import state_machine
> my_machine = state_machine.new_machine()
> my_machine.set_state(3)
> my_machine.get_state()


A possible solution:

# state_machine.py
class _StateMachine(object):
   def __init__(self):
     self._state = SomethingHere()
   def get_state(self):
     return self._state
   def set_state(self, xxx):
     # etc

_s = _StateMachine()
get_state = _s.get_state()
set_state = _s.set_state()

You still have a global, but at least it's a machine instance, not it's 
state !-)

Now the question is: why do you think it's so important for your users 
to only see functions ? What's so wrong with:

from state_machine import *
m = get_state_machine()
m.set_state(42)



More information about the Python-list mailing list