状态机和全局变量 [英] state machine and a global variable

查看:190
本文介绍了状态机和全局变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

亲爱的名单,

我正在编写非常简单的状态机库,如下所示:


_state =无

def set_state(州):

global _state

_state = state

def get_state():< br $> b $ b print _surface


但是我讨厌使用全局变量。那么,拜托,有没有更好的方式

这样做?我想要的是用户必须输入尽可能少的价格,例如:

来自state_machine import的
*

set_state (3)

get_state()


也就是说:

import state_machine

my_machine = state_machine.new_machine()

my_machine.set_state(3)

my_machine.get_state()


先谢谢!

解决方案

2007年12月14日上午10:52,< tu ********* @ gmail.comwrote:


亲爱的清单,

我正在编写非常简单的状态机库,如下所示:


_state =无


def set_state(州):

global _state

_state = state

def get_state():

print _surface


但我讨厌使用全局变量。那么,拜托,有没有更好的方式

这样做?我想要的是用户必须输入尽可能少的价格,例如:



是的,不要这样做。


from state_machine import *

set_state(3)

get_state()


这不是状态机,它只是状态


即,没有类似:

import state_machine

my_machine = state_machine.new_machine()

my_machine.set_state(3)

my_machine.get_state()



不要害怕对象,特别是如果你的恐惧是由于b
稻草人C风格API引起的。


来自state_machine import状态


州=州()

打印state.current_state

state.do_something(''sadfsafsad '')#出一些基于当前状态的东西

print state.current_state


12月14日,8:5凌晨2点,tuom.lar ... @ gmail.com写道:


亲爱的清单,

我写的很简单机器库,像这样:


_state =无


def set_state(州):

global _state < br $>
_state = state

def get_state():

print _surface


但是我讨厌使用全局变量。那么,拜托,有没有更好的方式

这样做?我想要的是用户必须输入尽可能少的价格,例如:

来自state_machine import的
*

set_state (3)

get_state()


也就是说:

import state_machine

my_machine = state_machine.new_machine()

my_machine.set_state(3)

my_machine.get_state()


先谢谢!



就个人而言,我会以第二种方式做到这一点。这似乎是最合适的方式。但是,你可以通过第二种方式实现,

仍然可以获得你想要的功能。

[state_machine.py中的代码]

class StateMachine (对象):

def __init __(self,state = None):

如果state为None:

state =" DEFAULT_INIT_STATE"

self._state =州


def get_state(个体经营):

#print self._surface

return self._state


def set_state(self,state):

self._state = state


_sm = StateMachine()

set_state = _sm.set_state

get_state = _sm.get_state

[/ code]

Matt


12月14日下午7:35,Matimus< mccre ... @ gmail.comwrote:


12月14日上午8:52,tuom.lar ... @ gmail.com写道:


亲爱的清单,

我正在编写非常简单的状态机库,如下所示:


_state = None


def set_state(state):

global _state

_state = state


def get_state():

print _surface


但我讨厌使用全局变量。那么,拜托,有没有更好的方式

这样做?我想要的只是用户必须输入尽可能少的
,例如:


from state_machine import *

set_state(3)

get_state()


也就是说:

import state_machine

my_machine = state_machine.new_machine()

my_machine.set_state(3)

my_machine.get_state()


先谢谢!



就个人而言,我会以第二种方式做到这一点。这似乎是最合适的方式。但是,你可以通过第二种方式实现,

仍然可以获得你想要的功能。


[state_machine.py中的代码]

class StateMachine(object):

def __init __(self,state = None):

如果state为None:

state =" ; DEFAULT_INIT_STATE"

self._state = state


def get_state(self):

#print self._surface

返回self._state


def set_state(self,state):

self._state = state


_sm = StateMachine()

set_state = _sm.set_state

get_state = _sm.get_state

[/ code]


马特



非常感谢!这正是我的想法。


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

but I hate to use global variable. 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()

Thanks, in advance!

解决方案

On Dec 14, 2007 10:52 AM, <tu*********@gmail.comwrote:

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

but I hate to use global variable. 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:

Yes, don''t do it.

from state_machine import *
set_state(3)
get_state()

This isn''t a state machine, it''s just state

I.e., nothing like:
import state_machine
my_machine = state_machine.new_machine()
my_machine.set_state(3)
my_machine.get_state()

Stop being afraid of objects, especially if your fear is caused by
straw-man C style APIs.

from state_machine import State

state = State()
print state.current_state
state.do_something(''sadfsafsad'') #does something based on the current state
print state.current_state


On Dec 14, 8:52 am, tuom.lar...@gmail.com wrote:

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

but I hate to use global variable. 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()

Thanks, in advance!

Personally I _would_ do it the second way. That seems to be the most
appropriate way to do it. However, you can do it the second way and
still get the functionality you desire.
[code in state_machine.py]
class StateMachine(object):
def __init__(self, state=None):
if state is None:
state = "DEFAULT_INIT_STATE"
self._state = state

def get_state(self):
# print self._surface
return self._state

def set_state(self, state):
self._state = state

_sm = StateMachine()
set_state = _sm.set_state
get_state = _sm.get_state
[/code]

Matt


On Dec 14, 7:35 pm, Matimus <mccre...@gmail.comwrote:

On Dec 14, 8:52 am, tuom.lar...@gmail.com wrote:

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

but I hate to use global variable. 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()

Thanks, in advance!


Personally I _would_ do it the second way. That seems to be the most
appropriate way to do it. However, you can do it the second way and
still get the functionality you desire.

[code in state_machine.py]
class StateMachine(object):
def __init__(self, state=None):
if state is None:
state = "DEFAULT_INIT_STATE"
self._state = state

def get_state(self):
# print self._surface
return self._state

def set_state(self, state):
self._state = state

_sm = StateMachine()
set_state = _sm.set_state
get_state = _sm.get_state
[/code]

Matt


Thanks a lot! This is precisely what I had on my mind.


这篇关于状态机和全局变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆