Back to page
− Links
Print
Edit of
Python/列挙型
::
NJF Wiki
Edit of
xpwiki
:
Python
/
列挙型
Edit of # kfebf26b
Details:
*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
Edit Summary:
Q & A Verification:
Please answer next a question before page update. (needless at preview)
Q:
a, b, c and next is?
A:
Name:
Do not change timestamp
View Text Formatting Rules
[1]
Links list
(This host) = http://njf.jp
(This host)
/cms/modules/xpwiki/?cmd=edit&help=true&page=Python%2F%E5%88%97%E6%8C%99%E5%9E%8B