1: 2019-05-26 (日) 01:56:40 njf |
現: 2019-05-26 (日) 22:02:18 njf |
| + | *基本 [#oda99e39] |
| + | |
| Pythonの列挙型enumは何かひとまとまりの定数を定義するときに便利な型で、Python3.4から導入されました。 | | Pythonの列挙型enumは何かひとまとまりの定数を定義するときに便利な型で、Python3.4から導入されました。 |
| | | |
- | *基本 [#oda99e39] | + | 例えば、ゲームのプログラムで今どの画面かを識別するために以下のような変数を定義したとします。 |
- | | + | |
- | 例えば、ゲームで今どの画面かを識別するために以下のような定数を定義したとします。 | + | |
| | | |
| SCREEN_TITLE = 1 #タイトル画面 | | SCREEN_TITLE = 1 #タイトル画面 |
| | | |
| from enum import Enum | | from enum import Enum |
| + | |
| class Screen(Enum): | | class Screen(Enum): |
| TITLE = 1 | | TITLE = 1 |
| | | |
| Enumは他の型の値と直接比較できないので注意してください。 | | Enumは他の型の値と直接比較できないので注意してください。 |
| + | めんどうなようですが、こうなっているとせっかく定義したEnum型を使わずに手で直接値を指定してしまうという、いわゆるマジックナンバーの問題をある程度予防してくれるというメリットがあります。 |
| | | |
- | もし比較したいなら、後述のIntEum型なら整数との比較が可能です。 | + | 必要であれば、後述のIntEum型なら整数との比較が可能です。 |
| | | |
| この記事では数値で定義しましたが、文字列で定義することも可能です。 | | この記事では数値で定義しましたが、文字列で定義することも可能です。 |
| | | |
| from enum import Enum, auto | | from enum import Enum, auto |
| + | |
| class Screen(Enum): | | class Screen(Enum): |
| TITLE = auto() | | TITLE = auto() |
| TEST3 = auto() | | TEST3 = auto() |
| TEST2_ALT = TEST2 | | TEST2_ALT = TEST2 |
| + | |
| print(Test.TEST2_ALT,Test.TEST2_ALT.value) | | print(Test.TEST2_ALT,Test.TEST2_ALT.value) |
| | | |
| | | |
| Enumにビット演算子を適用可能にしてフラグとして使いやすくした物です。 | | Enumにビット演算子を適用可能にしてフラグとして使いやすくした物です。 |
- | ここに書くと長くなるので後日ページを分けて説明します。 | + | ここに書くと長くなるのでページを分けて[[Python/FlagとIntFlag]]で説明しています。 |
| | | |
| *まとめ [#a8d5981a] | | *まとめ [#a8d5981a] |