ページへ戻る
− Links
印刷
Python/列挙型
の編集 ::
NJF Wiki
xpwiki
:
Python
/
列挙型
の編集
# oda99e39 の編集
ページ内容:
*基本 [#oda99e39] Pythonの列挙型enumは何かひとまとまりの定数を定義するときに便利な型で、Python3.4から導入されました。 例えば、ゲームのプログラムで今どの画面かを識別するために以下のような変数を定義したとします。 SCREEN_TITLE = 1 #タイトル画面 SCREEN_PLAYING = 2 #プレイ中画面 SCREEN_GAME_OVER = 3 #ゲームオーバー画面 SCREEN_TRANSITION = 4 #画面遷移中 このままでもプログラムできますが、もう少しまとめてあつかいたい、と考える人もいるでしょう。 また、ただの変数なのでうっかり書きかえないかも心配です。 これをenumを使えば、以下のように書き直せます。 from enum import Enum class Screen(Enum): TITLE = 1 PLAYING = 2 GAME_OVER = 3 TRANSITION = 4 使う時は Screen.PLAYING などとすれば参照できます。 比較するときはメンバー同士で行う必要があります。 print(Screen.TITLE == 1) print(Screen.TITLE == Screen.TITLE) 結果: False True Enumは他の型の値と直接比較できないので注意してください。 めんどうなようですが、こうなっているとせっかく定義したEnum型を使わずに手で直接値を指定してしまうという、いわゆるマジックナンバーの問題をある程度予防してくれるというメリットがあります。 必要であれば、後述のIntEum型なら整数との比較が可能です。 この記事では数値で定義しましたが、文字列で定義することも可能です。 また、これらは実質定数として扱えます。 例えば、 Screen.GAME_OVER = 2 とすると Traceback (most recent call last): File "enumtest.py", line 10, in <module> Screen.GAME_OVER = 2 File "/usr/lib/python3.6/enum.py", line 363, in __setattr__ raise AttributeError('Cannot reassign members.') AttributeError: Cannot reassign members. というような実行時エラーが出ます。 また、 screen = Screen.PLAYING print(screen) とすると、 Screen.PLAYING とクラスとメンバー名が出力されるのでデバッグの時にわかりやすくて便利です。 nameとvalueというプロパティを使えばメンバー名と値も参照できます。 print(Screen.GAME_OVER.name,Screen.GAME_OVER.value) 結果: GAME_OVER 4 ループ処理もできます。 このとき、順番は定義順であることが保証されています。 for s in Screen: print(s) 結果: Screen.TITLE Screen.PLAYING Screen.GAME_OVER Screen.TRANSITION となります。 このようにenumを使うと定数をまとめてあつかいやすくなります。 さらに以下のような便利な機能があります。
編集の要約:
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