nprogram’s blog

気ままに、プログラミングのトピックについて書いていきます

Python enum学習

はじめに

Pythonで定数を安全に使いたいなと思い、enumについてまとめました。詳しくは以下をご確認ください

enum --- 列挙型のサポート — Python 3.8.2 ドキュメント

Enum の作成

列挙型は読み書きが容易になるよう class 文を使って作成します。 列挙型は以下のように Enum のサブクラスとして定義します。

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

列挙型の値を取り出す場合はvalueプロパティを使用します

print(Color.RED.value)
print(Color.GREEN.value)
print(Color.BLUE.value)
1
2
3

列挙型のメンバーは人が読める文字列表現を持ちます:

print(Color.RED)
print(Color.GREEN)
print(Color.BLUE)

print(Color.RED.name)
print(Color.GREEN.name)
print(Color.BLUE.name)
Color.RED
Color.GREEN
Color.BLUE
RED
GREEN
BLUE

列挙型は定義順でのイテレーションをサポートしています

for item in Color:
    print(item.value)
1
2
3

辞書型に格納できます

colors_set = {}
colors_set[Color.RED] = 'apples'
colors_set[Color.GREEN] = 'mountain'
colors_set[Color.BLUE] = 'ocean'

for key, value in colors_set.items():
    print(f'{key.name} : {value}')
RED : apples
GREEN : mountain
BLUE : ocean

比較

等価の比較は定義されています:

print(Color.BLUE == Color.RED)
print(Color.BLUE != Color.RED)
print(Color.BLUE == Color.BLUE)

# ただし、非列挙型値との比較は常に不等となります
print(Color.RED == 1)
False
True
True
False