スポンサーリンク

【Python】enumの使い方を分かりやすくまとめ

記事内に広告が含まれています。

Pythonのenum(列挙型)は、関連する定数のグループを一つのクラスで管理できる便利なモジュールです。複雑なコードで定数を使う際に、可読性や保守性を向上させるのに役立ちます。

enumの基本的な使い方や使用例をまとめます。

スポンサーリンク

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を活用することで、メンテナンス性の高いコードを実現できます。

スポンサーリンク
Python
著者SNS
タイトルとURLをコピーしました