類正確枚舉值我previous question被問及枚舉蟒蛇的Python元類來生成
比方說,我創建國家類:
class State(object):
"""
Abstract class representing a state.
"""
enum = 1
def __init__(self, instance):
self.instance = instance
def is_flag(self, flag):
return flag & self.enum == self.enum
然後我創建不同的實際狀態
class New(State):
enum = 2
def pay(self):
...
class Paid(State):
enum = 4
def complete(self):
...
class Completed(State):
enum = 8
ACCOUNTABLE = Paid.enum | Completed.enum
雖然這個工作,我想自動生成的枚舉值,它似乎可以通過使用Meta類來完成,問題是如何?
抽象基類不是元類的同一個事物。無論如何,使用一個包含單個整數值的屬性創建單獨的類似乎是創建Enum值非常沉重的方法。這種方法的另一個問題是,生成的整數值可能會根據定義的子類的順序和數量而變化 - 這意味着它們不會是常量值,這對於枚舉通常是可取的。 – martineau 2014-08-28 04:10:23
我也認爲可以通過元類生成不一致的值。我想實現StateMachine模式,而不僅僅是Enum。 – 2014-08-28 20:48:23
目前尚不清楚StateMachine模式如何能夠避免不一致的值的問題。此外,在您發佈自己的問題的答案中,您也不需要使用ABCMeta。在Python中,抽象基類與C++中的不同。如果你堅持用類來表示不同的枚舉值 - 一個可疑的方法 - 一個元類可能是你所需要的。 – martineau 2014-08-28 21:02:04