python定义一个状态对象

时间:2013-10-31 08:59:57

标签: python state

我写了以下代码:

class Game(object):
    class States(object):
        STARTED = 1 << 0
        LOADING = 1 << 1
        ACTIVE = 1 << 2
        ENDED = 1 << 3

    state = States.LOADING

有没有更好的方法来定义状态对象?

2 个答案:

答案 0 :(得分:7)

我见过这种模式:

class Demo:
     STARTED, LOADING, ACTIVE, ENDED = range(4)

或者如果你真的需要不同的位:

class Demo:
     STARTED, LOADING, ACTIVE, ENDED = (2**x for x in range(4))

那就是说,你为什么要为自己做点操作而负担?只需使用布尔属性:

class States(object):
    def __init__(self):
         self.started = False
         self.loading = False
         self.active = False
         self.ended = False

允许你写:

if state.loading:

if state.started or state.loading:

更易读。

答案 1 :(得分:0)

是的,有。使用新的Python Enum type(也是backported)。然后你的代码将是:

class State(Enum):
    STARTED = 1
    LOADING = 2
    ACTIVE = 3
    ENDED = 4

class Game(object):
    state = State.LOADING