Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonのEnum(列挙型)とは?基本から応用まで徹底解説

PythonのEnumは、一意かつ不変の値に紐付けられたシンボリックな名前(メンバー)の集合、すなわち「列挙型」を作成するためのクラスです。列挙型のメンバー同士はシンボル名によって比較でき、列挙型そのものも反復処理(イテレーション)が可能です。

Enumには主に以下のような特徴があります。

  • オブジェクトの評価可能な文字列表現(repr())を持つ
  • nameキーワードを使ってメンバー名を表示できる
  • type()関数でEnumの型を確認できる

基本的な使い方の例

import enum
# enumクラスを使って列挙型を定義
class Days(enum.Enum):
    Sun = 1
    Mon = 2
    Tue = 3

# Enumメンバーを文字列として表示
print("The enum member as a string is : ", end="")
print(Days.Mon)

# Enumメンバーをrepr形式で表示
print("The enum member as a repr is : ", end="")
print(repr(Days.Sun))

# Enumメンバーの型を確認
print("The type of enum member is : ", end="")
print(type(Days.Mon))

# Enumメンバーの名前を表示
print("The name of enum member is : ", end="")
print(Days.Tue.name)

実行結果

The enum member as a string is : Days.Mon
The enum member as a repr is : <Days.Sun: 1>
The type of enum member is : <enum 'Days'>
The name of enum member is : Tue

列挙型をイテラブルとして出力する

Enumはイテラブルなオブジェクトとして扱えるため、forループを使ってすべてのメンバーを順番に出力できます。以下のコードでは、for文で全メンバーを表示しています。

コード例

import enum
# enumクラスを使って列挙型を定義
class Days(enum.Enum):
    Sun = 1
    Mon = 2
    Tue = 3

# ループですべてのEnumメンバーを出力
print("The enum members are : ")
for weekday in (Days):
    print(weekday)

実行結果

The enum members are :
Days.Sun
Days.Mon
Days.Tue

Enumのハッシュ化

列挙型のメンバーはハッシュ可能(hashable)であるため、辞書やセットのキーとして利用できます。次の例では、実際にハッシュ化を行い、正しく機能しているかどうかを確認します。

コード例

import enum
# enumクラスを使って列挙型を定義
class Days(enum.Enum):
    Sun = 1
    Mon = 2

# ハッシュ化して辞書を作成
Daytype = {}
Daytype[Days.Sun] = 'Sun God'
Daytype[Days.Mon] = 'Moon God'

# ハッシュ化が成功しているか確認
print(Daytype == {Days.Sun: 'Sun God', Days.Mon: 'Moon God'})

実行結果

True

Enumへのアクセス方法

Enumのメンバーには、「名前」または「値」のいずれかを使ってアクセスできます。以下の例では、まず名前をインデックスのように使って値にアクセスし、続いて値からメンバーを取得する方法を示します。

コード例

import enum
# enumクラスを使って列挙型を定義
class Days(enum.Enum):
    Sun = 1
    Mon = 2

print('enum member accessed by name: ')
print(Days['Mon'])
print('enum member accessed by Value: ')
print(Days(1))

実行結果

enum member accessed by name:
Days.Mon
enum member accessed by Value:
Days.Sun

Enumの比較

Enum同士の比較は非常にシンプルで、通常の比較演算子(==!=)を使用するだけです。同じ値を持つメンバー同士は等しいと判定されます。

コード例

import enum
# enumクラスを使って列挙型を定義
class Days(enum.Enum):
    Sun = 1
    Mon = 2
    Tue = 1

if Days.Sun == Days.Tue:
    print('Match')
if Days.Mon != Days.Tue:
    print('No Match')

実行結果

Match
No Match

このように、PythonのEnumを使うことで、定数に意味のある名前を付けて管理でき、コードの可読性と保守性が大幅に向上します。ステータス管理や設定値の定義など、マジックナンバーを避けたい場面でぜひ活用してみてください。

  1. 【初心者向け】Pythonのissuperset()メソッドの使い方をわかりやすく解説

    はじめにこの記事では、Pythonのissuperset()メソッドについて、基本的な仕組みから実際のコード例まで詳しく解説します。issuperset()は、セット(集合)に対して使用できるメソッドで、引数として渡されたセットのすべての要素が、呼び出し元のセットに含まれているかどうかを判定します。呼び出し元のセットBが、引数のセットAのすべての要素を含んでいる場合 → True を返すセットAの要素がすべてBに含まれていない場合 → False を返すつまり、「BがAの上位集合(スーパーセット)であるかどうか」を判定するためのメソッドです。基本構文B.issuperset(A)この式は、Bが

  2. Pythonクラスで列挙型(Enum)を使う方法をわかりやすく解説

    Pythonの列挙型(Enum)とはPythonには標準ライブラリとして「enum」モジュールが用意されており、これを使うことで列挙型(Enum)を簡単に定義できます。列挙型とは、あらかじめ決められた名前付きの定数をひとまとめにして管理するための仕組みです。曜日やステータス、車種など、取りうる値が限られているデータを扱う際に非常に便利です。enumモジュールを利用することで、マジックナンバー(意味のない裸の数値)をコードに直接書くことを避けられ、可読性と保守性の高いプログラムを作成できます。クラス内でEnumを定義する基本例以下は、Carクラスでenum.Enumを継承し、複数の車種を列挙型と