(最終更新日:2023年6月)
✔このような方へ向けて書かれた記事となります
「PythonでEnumをどのように使えばいいのか知りたい」
「Enumの定義方法や活用法が学びたい」
「実際にEnumを使ったコード例が見てみたい」
✔当記事を通じてお伝えすること
- PythonでのEnumの概要
- Enumの定義方法やその応用
- Enumを用いた実践的なコード例
当記事では、PythonでのEnumの基本から、その活用方法や実用的なコード例まで、詳しく解説しています。
ぜひ最後までお読みいただき、Enumの活用法をマスターしてください。
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にはさまざまな派生型が存在し、その中でもIntEnum
やFlag
がよく使われます。
- 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全般についてさまざまな知識を身につけていくことがおすすめです。
これからも学び続けましょう。