Pythonでenumを使って列挙型を定義
この記事では、Pythonのenumモジュールを使って列挙型を定義する方法を説明します。enumを使うメリットや、様々なenumの定義方法、そして実践的な活用例を紹介します。
目次
enumモジュールとは?
Pythonの`enum`モジュールは、列挙型(enumeration)を定義するための強力なツールです。列挙型とは、名前付き定数の集合であり、コードの可読性と保守性を向上させるのに役立ちます。`enum`モジュールを使うことで、マジックナンバーを避け、コードをより分かりやすく、エラーを防ぎやすくなります。
import enum
class Color(enum.Enum):
RED = 1
GREEN = 2
BLUE = 3
基本的なenumの定義
enumクラスを定義するには、`enum.Enum`クラスを継承します。各メンバは、名前と値のペアで定義されます。
import enum
class Day(enum.Enum):
MONDAY = 1
TUESDAY = 2
WEDNESDAY = 3
THURSDAY = 4
FRIDAY = 5
SATURDAY = 6
SUNDAY = 7
print(Day.MONDAY)
print(Day.MONDAY.value)
print(Day.MONDAY.name)
メンバへのアクセス
enumのメンバには、`クラス名.メンバ名`でアクセスできます。メンバの値と名前には、`.value`と`.name`属性でアクセスできます。
import enum
class Color(enum.Enum):
RED = 1
GREEN = 2
BLUE = 3
print(Color.RED) # <Color.RED: 1>
print(Color.RED.value) # 1
print(Color.RED.name) # RED
値の指定
メンバの値は、整数、文字列、または任意のハッシュ可能なオブジェクトにできます。
import enum
class Status(enum.Enum):
ACTIVE = 'active'
INACTIVE = 'inactive'
PENDING = 'pending'
print(Status.ACTIVE.value) # active
メソッドの追加
enumのメンバにメソッドを追加することもできます。
import enum
class Planet(enum.Enum):
MERCURY = 1
VENUS = 2
EARTH = 3
def __str__(self):
return self.name.lower()
print(Planet.EARTH) # <Planet.EARTH: 3>
print(str(Planet.EARTH)) # earth
auto()関数を使った簡潔な定義
`auto()`関数を使うと、メンバの値を自動的に割り当てることができます。
import enum
class Direction(enum.Enum):
NORTH = enum.auto()
SOUTH = enum.auto()
EAST = enum.auto()
WEST = enum.auto()
print(Direction.NORTH.value) # 1
print(Direction.SOUTH.value) # 2
print(Direction.EAST.value) # 3
print(Direction.WEST.value) # 4
enumの比較
enumのメンバは、`==`演算子で比較できます。
import enum
class Language(enum.Enum):
PYTHON = 1
JAVA = 2
JAVASCRIPT = 3
print(Language.PYTHON == Language.JAVA) # False
print(Language.PYTHON == Language.PYTHON) # True
実践例:プログラミング言語の列挙
enumを使って、プログラミング言語を列挙してみましょう。
import enum
class ProgrammingLanguage(enum.Enum):
PYTHON = 1
JAVA = 2
JAVASCRIPT = 3
C_PLUS_PLUS = 4
C_SHARP = 5
GO = 6
SWIFT = 7
def get_language_name(language_code):
try:
return ProgrammingLanguage(language_code).name
except ValueError:
return "Unknown Language"
print(get_language_name(ProgrammingLanguage.PYTHON)) # PYTHON
print(get_language_name(10)) # Unknown Language
関連記事
- PythonでEnumを使う(enum.Enum)
- Pythonでクラスを定義(class)
- Pythonでインスタンス変数・クラス変数を使う
- Pythonで継承を使う
- Pythonで特殊メソッドを使う(__str__, __repr__, __add__ など)
- Pythonでデータクラスを使う(dataclasses.dataclass, Python 3.7以降)
- Pythonで関数に型ヒントをつける (Python 3.5以降)
- Pythonで名前付きタプルを使う(collections.namedtuple, typing.NamedTuple (Python 3.6以降))
- Pythonで静的メソッド・クラスメソッドを使う(@staticmethod, @classmethod)
- Pythonでメソッドを定義