我寫了下面的代碼:蟒蛇定義狀態對象
class Game(object):
class States(object):
STARTED = 1 << 0
LOADING = 1 << 1
ACTIVE = 1 << 2
ENDED = 1 << 3
state = States.LOADING
它有沒有更好的方式來定義一個狀態對象?
我寫了下面的代碼:蟒蛇定義狀態對象
class Game(object):
class States(object):
STARTED = 1 << 0
LOADING = 1 << 1
ACTIVE = 1 << 2
ENDED = 1 << 3
state = States.LOADING
它有沒有更好的方式來定義一個狀態對象?
我已經看到了這種模式:
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個狀態 – Nirock
,您應該避免位集,因爲它們的意思是「可以同時是它們中的任意數量」。 –
是的,有。使用新的Python Enum type(它也是backported)。那麼你的代碼是:
class State(Enum):
STARTED = 1
LOADING = 2
ACTIVE = 3
ENDED = 4
class Game(object):
state = State.LOADING
你爲什麼使用位?這些州不是相互排斥的嗎? –
我所需要的就是能夠比較像'如果狀態和States.LOADING' – Nirock
我猜這是有效的,但它似乎並不是最好的做法.. – Nirock