こんにちは!ゆーや(@yuyamanm118712)です。
こちらのページでは完全独学でWebプログラマとなった私が
「enum」に関して必要な情報をまとめています。
この記事を読むと
- 「Enumとは何か」がわかる
- 「Enumをいつ使うのか」がわかる
- 「Enumの使い方」がわかる
最後までじっくりと読んで、一緒に学習にしていきましょう。
なお、ご指摘・ご質問はTwitter(@yuyamanm118712)のDMまでよろしくお願いします。
Enumとは
Enumって何?
列挙型と呼ばれるもので、定数(または名前)の集合です!
例えば、信号は「赤、青、黄」の3種類であり、不変ですよね!
こういった選択肢が決まっている情報はEnumでまとめておくと、便利です!
具体例を見ていきましょう!
Enumの定義
Enumは次のように定義します!
信号を例にSignalというEnumを作成してみましょう!
from enum import Enum
class Signal(Enum):
RED = 1
BLUE = 2
YELLOW = 3
信号を例にしたけど、「曜日」やシステムに使う「ステータス」などをまとめておくのも良いね!
Enumを作るだけでは、動かないので使い方を見てみましょう!
その前にクラス(class)ってなんだっけ?という方は↓こちら↓を見て頂けたらと思います!
Enumの値へのアクセス
Enumの値へのアクセスの方法ですが、5つほどパターンを覚えておきましょう!
from enum import Enum
class Signal(Enum):
RED = 1
BLUE = 2
YELLOW = 3
print(Signal)
# 実行結果:<enum 'Signal'>
print(Signal(2))
# 実行結果:Signal.BLUE
print(Signal.RED)
# 実行結果:Signal.RED
print(Signal.RED.name)
# 実行結果:RED
print(Signal.RED.value)
# 実行結果:1
これだけ覚えておけば、困ることはほとんどないよ!
Enumはfor文で使える
Enumは、いわゆるイテラブルであり、for文で使うことができます!
「イテラブルってなんだっけ」という方は、for文と合わせて↓↓↓こちら↓↓↓で詳しく解説してあります!
Enum × forの実装例
Enumをfor文で使用するには、いつも「range」や配列を記述する場所に「Enum」を記述すれば大丈夫です!
from enum import Enum
# Enumを定義
class Signal(Enum):
RED = 1
BLUE = 2
YELLOW = 3
# Enumをfor文で回す
for color in Signal:
print('name:', color.name)
print('value:', color.value)
# 実行結果:
name: RED
value: 1
name: BLUE
value: 2
name: YELLOW
value: 3
for文で回される順番はEnumの定義の順番に影響されるので、
そこまで考慮して、Enumを定義しよう!
Enumの値を自動で設定するauto()
例えば、上の信号の例でいえば、RED、BLUE、YELLOWの名前は重要ですが、
その値「1」,「2」,「3」は「a」,「b」,「c」でも何でも良いですよね!
つまり、一意に値が定まっていれば、値に重要な意味はありません!
そんな時は、auto()を使うことで自動で連番を振ってくれます!
Enum × auto()の実装例
auto()で値を設定すると、勝手に1からの連番を振ってくれます!
from enum import Enum, auto
# Enumを定義
class Signal(Enum):
RED = auto()
BLUE = auto()
YELLOW = auto()
# Enumをfor文で回す
for color in Signal:
print('name:', color.name)
print('value:', color.value)
# 実行結果:
name: RED
value: 1
name: BLUE
value: 2
name: YELLOW
value: 3
autoを使うにはimportする必要があるので、忘れずに!
まとめ
① Enumとは列挙型と呼ばれるもので、定数(または名前)の集合
② Enumの定義の仕方
③ Enumの値へのアクセス方法 1~5
④ Enum × forの実装
⑤ Enum × auto()の実装
まとめの内容を見て、もう頭に浮かべば完璧!
コメント