Pythonのenum
(列挙型)は、関連する定数のグループを一つのクラスで管理できる便利なモジュールです。複雑なコードで定数を使う際に、可読性や保守性を向上させるのに役立ちます。
enum
の基本的な使い方や使用例をまとめます。
Contents
Enumの基本的な使い方
enum
は「列挙型」の略で、複数の名前付き定数をまとめて定義するための仕組みです。
たとえば、曜日や方角、状態を表す定数を管理する際に役立ちます。
まずは、enum
を使う基本的な例を見てみます。
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
# 使用例
print(Color.RED) # 出力: Color.RED
print(Color.RED.name) # 出力: RED
print(Color.RED.value) # 出力: 1
Color.RED
は列挙型のメンバーを表します。.name
で列挙メンバーの名前を取得できます。.value
で列挙メンバーの値を取得できます。
Enumの利点
enum
を使うことで、次のような利点があります。
- 定数名のグループ化
関連する定数を1つのクラスにまとめられ、コードが整理されます。 - 型の安全性
定数を文字列や数値で管理する場合に比べて、間違った値を渡すミスを防ぎやすくなります。 - 可読性の向上
名前付き定数を使用することで、コードの意味が明確になります。
メンバーへのアクセス方法
列挙型のメンバーにアクセスするいくつかの方法を紹介します。
名前を使用してアクセス
print(Color['RED']) # 出力: Color.RED
値を使用してアクセス
print(Color(1)) # 出力: Color.RED
列挙型メンバーの繰り返し処理
列挙型をループで処理することも可能です。
for color in Color:
print(color)
# 出力:
# Color.RED
# Color.GREEN
# Color.BLUE
自動的に値を割り当てる(auto
の使用)
値を自動的に割り当てるには、enum.auto
を使用します。
from enum import Enum, auto
class Color(Enum):
RED = auto()
GREEN = auto()
BLUE = auto()
print(Color.RED.value) # 出力: 1
print(Color.GREEN.value) # 出力: 2
IntEnumと独自の列挙型クラス
IntEnum
は、数値としても扱える列挙型を定義できます。
from enum import IntEnum
class Status(IntEnum):
SUCCESS = 1
FAILURE = 0
print(Status.SUCCESS + 1) # 出力: 2
使用例
状態管理に利用
以下の例では、列挙型を使って状態を明確に表現します。
from enum import Enum
class OrderStatus(Enum):
PENDING = "Pending"
SHIPPED = "Shipped"
DELIVERED = "Delivered"
def process_order(status):
if status == OrderStatus.PENDING:
print("Order is pending.")
elif status == OrderStatus.SHIPPED:
print("Order has been shipped.")
elif status == OrderStatus.DELIVERED:
print("Order has been delivered.")
process_order(OrderStatus.SHIPPED) # 出力: Order has been shipped.
Web APIのステータスコードに利用
APIレスポンスのステータスコードを管理する例です。
from enum import Enum
class HttpStatus(Enum):
OK = 200
BAD_REQUEST = 400
NOT_FOUND = 404
def get_status_message(status):
if status == HttpStatus.OK:
return "Request succeeded."
elif status == HttpStatus.BAD_REQUEST:
return "Bad request."
elif status == HttpStatus.NOT_FOUND:
return "Not found."
print(get_status_message(HttpStatus.OK)) # 出力: Request succeeded.
注意点
- Enumメンバーの値は変更できません。
一度定義された値は不変です。 - Enumメンバーは名前や値で一意である必要があります。
まとめ
enum
を使うことで、コードの可読性や安全性を大幅に向上させることができます。特に複数の定数を使う場面では、enum
を活用することで、メンテナンス性の高いコードを実現できます。