2

我写了以下代码:

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

    state = States.LOADING

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

4

2 回答 2

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:

这更具可读性。

于 2013-10-31T09:03:35.637 回答
1

就在这里。使用新的 Python Enum 类型(也已向后移植)。那么您的代码将是:

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

class Game(object):
    state = State.LOADING
于 2013-11-02T21:27:08.480 回答