🦊

Enumとは

2023/09/23に公開

今回はEnumについて解説します。

Enumとは?

Enumは

  • 変数のような機能を持つ一意の定数

です。

具体的な使い方を見ていきましょう。

使い方

その1 定数

Enumをクラスの引数に指定することで、そのクラスで定義した要素を定数のように扱うことができます。次にモード切り替えの例を示します。

from enum import Enum

class Mode(Enum):
    A = 'Addモード'
    D = 'Deleteモード'

current_mode = Mode.A

if current_mode == Mode.A:
    print("A")
if current_mode == Mode.D:
    print("D")

上記のように示すことで、簡潔にモードを管理することができます。

その2 変数

Enumとして指定したクラスの要素は、変数のように扱うこともできます。
次に変数として扱う例を示します。

from enum import Enum

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

# Enumメンバーへのアクセス(定数的な扱い)
print(Color.RED)  # 出力: Color.RED

# Enumメンバーの値へのアクセス(変数的な扱い)
print(Color.RED.value)  # 出力: 1

# Enumメンバーの名前へのアクセス
print(Color.RED.name)  # 出力: 'RED'

上記のように、定数としての性質を持ちながら変数のようにvalueを取得することも可能です。
またnameでvalueに対する名前も取得することできます。

嬉しいこと

モード管理

この特性は、フラグ管理やモード管理などの場面で役に立ちます。
複数の状態を持つフラグやモードを管理したい場合、次のように指定することができます。

class Mode(Enum):
    A = 'Addモード'
    D = 'Deleteモード'
    C = 'Clearモード'
    
now_mode = Mode.A
print(now_mode) # 出力:Mode.A
print(now_mode.balue) # 出力:Addモード

これにより、bool等で管理しづらい複数の状態について、わかりやすく管理することができます。

オプション

valueの自動割り当て

ちなみに、valueの指定が面倒な場合はauto()を使うことで自動的に1,2,3...が設定されます。
変数としての機能が不要な場合に使うと良いでしょう。

from enum import Enum, auto

class Mode(Enum):
    A = auto()
    D = auto()
    C = auto()

print(Mode.A.value) # 出力:1
print(Mode.A.value) # 出力:2
print(Mode.A.value) # 出力:3

まとめ

Enumは

  • 変数のような機能を持つ一意の定数

でした。
複数状態を持つフラグやモードをわかりやすく管理する方法として使用されます。

それでは今回はここまでです。最後まで読んでいただきありがとうございました!

Discussion