PythonのEnumについての一番シンプルな方法を紹介します。
(他のどの記事よりも実用的で分かりやすいはず・・・)
これだけ理解すれば困ることはほとんどありません!
Enumとは
定数を列挙して、ステータス管理などに便利です。
C#などを経験している方はPythonでもEnumを使いたくなりますよね。
公式ドキュメント
公式ドキュメントでは、
Enum, IntEnum, Flag, IntFlag, FlagBoundaryなどありますが、基本の「Enum」だけで十分だと思います。
(コードのシンプルさを考慮してもEnumだけが良いです)
ソースコード
Enumは説明よりコードを見る方が手っ取り早いので、さっそく紹介します。
Enumの名前と値の一覧を取得したいときもたまにあるので、
Classmethodとして実装しています。
Case1 ソースコード
from enum import Enum
class EnumColor(Enum):
RED = 1
GREEN = 2
BLUE = 3
YELLOW = 4
@classmethod
def get_names(cls) -> list:
# Enum定義が増えても対応可能
return [i.name for i in cls]
@classmethod
def get_values(cls) -> list:
# Enum定義が増えても対応可能
return [i.value for i in cls]
if __name__ == "__main__":
print(EnumColor.RED)
print(EnumColor.RED.name)
print(EnumColor.RED.value)
# 全ての名前を取得
print(EnumColor.get_names())
# 全ての値を取得
print(EnumColor.get_values())
yourColor = EnumColor.RED
if(yourColor == EnumColor.RED):
print("your color is red")
print("--- for loop ---")
for x in EnumColor:
print(x)
print(x.name)
print(x.value)
print("--- for loop end---")
# 値からEnum要素を取得
print(EnumColor(2))
# 値からEnum要素の名前を取得
print(EnumColor(2).name)
Case1 出力結果
EnumColor.RED
RED
1
['RED', 'GREEN', 'BLUE', 'YELLOW']
[1, 2, 3, 4]
your color is red
--- for loop ---
EnumColor.RED
RED
1
EnumColor.GREEN
GREEN
2
EnumColor.BLUE
BLUE
3
EnumColor.YELLOW
YELLOW
4
--- for loop end---
EnumColor.GREEN
GREEN
Case2 Enumの値に文字列含む
Enumの値には文字列を含めることが可能ですので簡単に紹介します。
使い方はCase1と全く同じです。
class EnumColorStr(Enum):
RED = "red"
GREEN = "green"
BLUE = "blue"
YELLOW = "yellow"
@classmethod
def get_names_all(cls):
return [i.name for i in cls]
@classmethod
def get_vals_all(cls):
return [i.value for i in cls]
print(EnumColorStr.get_names_all()) # 出力:['RED', 'GREEN', 'BLUE', 'YELLOW']
print(EnumColorStr.get_vals_all()) # 出力:['red', 'green', 'blue', 'yellow']
以上、Enumのベストプラクティスでした。
これさえ知っていれば何にでも活用できます!
更新履歴
- 2021/11/12 初版