PYTHON MEBY

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

関連記事