【初心者向け】PythonのEnumをマスター|サンプルコード付き

※本サイトにはプロモーション・広告が含まれています。

(最終更新日:2023年6月)

✔このような方へ向けて書かれた記事となります

「PythonでEnumをどのように使えばいいのか知りたい」
「Enumの定義方法や活用法が学びたい」
「実際にEnumを使ったコード例が見てみたい」

✔当記事を通じてお伝えすること

  • PythonでのEnumの概要
  • Enumの定義方法やその応用
  • Enumを用いた実践的なコード例

当記事では、PythonでのEnumの基本から、その活用方法や実用的なコード例まで、詳しく解説しています。

ぜひ最後までお読みいただき、Enumの活用法をマスターしてください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間17万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

Enumの概要

こちらでは、PythonにおけるEnum(列挙型)についてお伝えしていきます。

  • Enumとは?
  • PythonでのEnumの役割
  • Enumと他のデータ型の違い

Enumとは?

Enumは、Enumeration(列挙型)の略で、一連の名前付き定数値を表すデータ型です。

このデータ型を用いると、意味のある名前で値を表現できます。

enumモジュールを使ってEnumを定義してください。

例えば週の曜日を表現するEnumは、以下のように作成できます。

from enum import Enum

class Weekday(Enum):
    MONDAY = 1
    TUESDAY = 2
    WEDNESDAY = 3
    THURSDAY = 4
    FRIDAY = 5
    SATURDAY = 6
    SUNDAY = 7

day = Weekday.MONDAY
print(day)  # 出力: Weekday.MONDAY

if day == Weekday.MONDAY:
    print("今日は月曜日です")  # 出力: 今日は月曜日です

このEnumを使って、曜日を名前で表現できます。

PythonでのEnumの役割

Pythonにおいて、Enumはコードの可読性を向上させ、誤った値の代入を防止する役割があります。

なぜならEnumでは、予め定義された値のみを取るため、無効な値を持つことはないからです。

これにより、バグを防止するのに役立ちます。

# Enumの使用例
day = Weekday.MONDAY
print(day)  # Output: Weekday.MONDAY

Enumのメンバーは名前と値の組み合わせであり、名前を使って値を参照できます。

Enumと他のデータ型の違い

Enumは通常のデータ型と異なり、予め定められた固定の値しか持てないため、コードの安全性が向上します。

またEnumメンバーは、一意性が保証され、プログラム全体で一貫性を保てるのも特徴です。

通常の変数では、任意の値を持つことができ、一意性や一貫性が保証されません。

Enumライブラリの使用方法

EnumをPythonで使う方法について見ていきましょう。

  • 必要なライブラリインポート
  • PythonでEnumクラスを作成
  • Enumクラスのインスタンス生成

必要なライブラリインポート

PythonでEnumを使用するには、まずenumモジュールをインポートする必要があります。

以下はenumモジュールをインポートするコードです。

from enum import Enum

これで、Enumを使用する準備が整いました。

PythonでEnumクラスを作成

Enumクラスを作成するには、classキーワードを使用し、Enumを継承してください。

Enumクラス内で、固定の値を持つメンバーを定義します。

以下は、色を表すEnumクラスの例です。

from enum import Enum

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

この例では、ColorというEnumクラスを定義し、赤、緑、青の3つのメンバーを持つようにしています。

Enumクラスのインスタンス生成

Enumクラスのインスタンスは、通常のクラスのように生成することはありません。

代わりに、Enumクラスのメンバーを直接参照できるのです。

以下はEnumクラスのメンバーを参照する例です。

favorite_color = Color.RED
print(favorite_color)  # Output: Color.RED

Enumの基本的な使い方

Enumの使い方と、基本的な操作についてお伝えします。

  • Enumメンバーの取得
  • Enumメンバーの比較
  • Enumメンバーの一覧表示
  • 自動値割り当て
  • メンバーの別名定義
  • 重複値の制限

Enumメンバーの取得

Enumメンバーは、その名前や値を使って取得することができます。

# 名前で取得
day = Weekday['MONDAY']
print(day)  # Output: Weekday.MONDAY

# 値で取得
day = Weekday(1)
print(day)  # Output: Weekday.MONDAY

Enumメンバーの比較

Enumメンバーは比較することができ、それらが同じかどうかを判断します。

# 比較例
print(Weekday.MONDAY == Weekday.MONDAY)  # Output: True
print(Weekday.MONDAY == Weekday.TUESDAY)  # Output: False

Enumメンバーの一覧表示

Enumクラスのすべてのメンバーを一覧表示することもできます。

for day in Weekday:
    print(day)

自動値割り当て

PythonのEnumでは、値を明示的に指定しなくても自動的に値が割り当てられます。

from enum import Enum, auto

class Direction(Enum):
    NORTH = auto()
    EAST = auto()
    SOUTH = auto()
    WEST = auto()

print(list(Direction))
# 出力: [<Direction.NORTH: 1>, <Direction.EAST: 2>, <Direction.SOUTH: 3>, <Direction.WEST: 4>]

これは、値を自分で指定する必要がなく、コードをシンプルに保つのに便利です。

メンバーの別名定義

Enumでは、同じ値を持つ異なる名前のメンバーを定義できます。

エイリアスや別名として使う場合に便利です。

class Status(Enum):
    READY = 1
    BUSY = 2
    FINISHED = 1

print(Status.READY)       # Output: Status.READY
print(Status.FINISHED)    # Output: Status.READY

重複値の制限

Enumメンバーの重複する値を禁止することも可能です。

@uniqueデコレータを使用しましょう。

from enum import Enum, unique

@unique
class UniqueColor(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3
    # PURPLE = 1  # これはエラーを引き起こします

IntEnumやFlagクラスの利用

Enumにはさまざまな派生型が存在し、その中でもIntEnumFlagがよく使われます。

  • IntEnumクラスで整数値との比較を可能にする
  • Flagクラスの活用

IntEnumクラスで整数値との比較を可能にする

IntEnumはEnumのサブクラスで、整数のみを値として持ち、通常の整数として振る舞います。

from enum import IntEnum

class Priority(IntEnum):
    LOW = 1
    MEDIUM = 2
    HIGH = 3

print(Priority.LOW < Priority.HIGH)  # Output: True
print(Priority.LOW < 5)  # Output: True

Flagクラスの活用

Flagは、ビットフラグを扱うためのEnum。

ビット操作でフラグを組み合わせる際に便利です。

from enum import Flag, auto

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    EXECUTE = auto()

permission = Permission.READ | Permission.WRITE
print(permission)  # Output: Permission.READ|WRITE

Enumクラスにカスタムメソッドを定義

Enumクラスは通常のクラスと同様に、カスタムメソッドを定義できます。

これにより、Enumメンバーに関連する機能を追加できるのです。

from enum import Enum

class Shape(Enum):
    CIRCLE = 1
    SQUARE = 2
    TRIANGLE = 3

    def area(self, size):
        if self == Shape.CIRCLE:
            return 3.14 * size * size
        elif self == Shape.SQUARE:
            return size * size
        elif self == Shape.TRIANGLE:
            return (size * size) / 2

shape = Shape.SQUARE
print(shape.area(5))  # Output: 25

Python Enumのベストプラクティス

Enumを使用する上でのベストプラクティスについてご覧ください。

  • 型ヒントを活用
  • 見やすいメンバー名の命名規則

型ヒントを活用

Enumを使用する際には、型ヒントを活用してコードの可読性を向上させられます。

これにより、Enumクラスがどのような値を取るかが明確になるのです。

from enum import Enum

class Season(Enum):
    SPRING = "spring"
    SUMMER = "summer"
    AUTUMN = "autumn"
    WINTER = "winter"

def favorite_season(season: Season) -> None:
    print(f"My favorite season is {season}")

favorite_season(Season.SUMMER)

見やすいメンバー名の命名規則

Enumメンバーの名前は、全て大文字とし、単語間はアンダースコアで区切るのが一般的です。

これにより、Enumメンバーであることが明確になり、コードが読みやすくなります。

from enum import Enum

class TrafficLight(Enum):
    RED_LIGHT = 1
    YELLOW_LIGHT = 2
    GREEN_LIGHT = 3

まとめ

当記事ではEnumの基本的な使い方を紹介してきました。

  • Enumとは?
  • Enumの使い方
  • Enumの派生・応用した使い方

PythonのEnumを使うと、コードがより読みやすく、保守性が高まるでしょう。

なぜなら一連の固定値を、効果的に表現できるから。

Enumをつかいこなすためにも、Python全般についてさまざまな知識を身につけていくことがおすすめです。

これからも学び続けましょう。

タイトルとURLをコピーしました