8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python Enum ベストプラクティス

Last updated at Posted at 2021-11-12

PythonのEnumについての一番シンプルな方法を紹介します。
(他のどの記事よりも実用的で分かりやすいはず・・・)
これだけ理解すれば困ることはほとんどありません!

Enumとは

定数を列挙して、ステータス管理などに便利です。
C#などを経験している方はPythonでもEnumを使いたくなりますよね。

公式ドキュメント

公式ドキュメントでは、
Enum, IntEnum, Flag, IntFlag, FlagBoundaryなどありますが、基本の「Enum」だけで十分だと思います。
(コードのシンプルさを考慮しても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 初版
8
4
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?