ページへ戻る
− Links
印刷
Python/列挙型
の編集 ::
NJF Wiki
xpwiki
:
Python
/
列挙型
の編集
# kfebf26b の編集
ページ内容:
*auto [#kfebf26b] Python3.6から自動で番号をつけてくれるautoという関数が加わりました。 from enum import Enum, auto class Screen(Enum): TITLE = auto() PLAYING = auto() GAME_OVER = auto() TRANSITION = auto() とすれば自動で番号をつけてくれます。 例えば上の例でタイトル画面の前にというロード画面を付け加えたい、順番的にできればそれを表す定数は1にしたい、となったときに、手で番号をつけると今までの定義を全て手で1ずらさねばなりません。 class Screen(Enum): LOADING = 1 TITLE = 2 #ここから下全て1ずらした PLAYING = 3 GAME_OVER = 4 TRANSITION = 5 enumのメンバー数が多いと編集が大変になります。 autoを使っておけば自動で番号をつけてくれるので「LOADING = auto()」という一行を付け加えるだけでよく、手間が省けます。 class Screen(Enum): LOADING = auto() #この行だけ増やした TITLE = auto() PLAYING = auto() GAME_OVER = auto() TRANSITION = auto() また、enum型は値が一意になる事は保証していません。 次のようなコードは問題なく実行されます。 class Test(Enum): TEST1 = 1 TEST2 = 1 TEST3 = 1 しかし、実際には一意な値をつけたいときが多いでしょう。 手で定義するとどうしても書き間違いの可能性が出てきます。 その時は「@unique」というデコレータを使えば一意であることが保証されます。 @unique class Test(Enum): TEST1 = 1 TEST2 = 1 TEST3 = 1 とすると、実行時エラーになります。 しかし、autoを使っておけば、自動的に値は一意になります。 とりあえず値はなんでもいいという場合にはautoを使うのがおすすめです。 autoを使いつつ、特定の値を同じにしたければ以下のようにします。 class Test(Enum): TEST1 = auto() TEST2 = auto() TEST3 = auto() TEST2_ALT = TEST2 print(Test.TEST2_ALT,Test.TEST2_ALT.value) 結果: Test.TEST2 2
編集の要約:
Q & A 認証:
ページ更新時は次の質問にお答えください。(プレビュー時は必要ありません)
Q:
「東京」の読みがな?(ひらがなで)
A:
お名前:
タイムスタンプを変更しない
テキスト整形のルールを表示する
[1]
Links list
(This host) = https://njf.jp
(This host)
/cms/modules/xpwiki/?cmd=edit&help=true&page=Python%2F%E5%88%97%E6%8C%99%E5%9E%8B