🦊
Enumとは
今回は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