Node
クラスの一連の状態を作成しようとしています。通常、これを行うには、各Node
インスタンスのstate
変数を に設定しint
、どの int がどの状態に対応するかを文書化します (s がないためenum
)。
今回は、ちょっと変わったものを試してみたいので、これにしました。
class Node:
state1 = 1
state2 = 2
def __init__(self):
...
これはうまくいきます。しかし、状態がたくさんあるという問題に遭遇しました。手動で入力するには多すぎます。さらに、これほど多くの状態があると、誤りを犯して同じものを 2 つの状態に割り当てる可能性がありますint
。これは、状態をテストするときにバグの原因になります (例:とが両方でif self.state==Node.state1
ある場合に失敗する可能性があります)。Node.state1
Node.state2
3
このため、次のようなことをしたいと思います。
class Node:
def __init__(self):
...
...
for i,state in enumerate("state1 state2".split()):
setattr(Node, state, i)
これにより、状態に値を割り当てる際の人的エラーは修正されますが、クラス変数がクラス定義の外で設定されているため、非常に見苦しいものです。
この方法でクラス定義内にクラス変数を設定する方法はありますか? 私は理想的にはこれをしたいと思います:
class Node:
for i,state in enumerate("state1 state2".split()):
setattr(Node, state, i)
...しかし、Node
まだ定義されていないため、それは機能しません。NameError
あるいは、enum
s は python3.3 に存在しますか?
問題があれば、私はPython3.3.2を使用しています