PythonのEnumは、特定の数値を持つ一連の名前付き値を定義するための便利な方法です。しかし、これらのEnum値を比較するときには注意が必要です。特に ‘is’ 演算子を使用する場合です。
Enumと ‘is’ 演算子
Pythonでは、オブジェクトが同じかどうかを調べるために ‘is’ 演算子を使用します。しかし、Enumのインスタンスを比較するときには、’==’ 演算子を使用することが一般的です。
例えば、以下のようなEnumがあるとします。
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
このとき、以下のように ‘is’ 演算子を使用してEnumの値を比較すると、期待した結果が得られません。
if Color.RED is Color.RED: # True
print('Same')
else:
print('Different')
これは、’is’ 演算子がオブジェクトの同一性をチェックするため、Enumの値が同じでも異なるオブジェクトであれば ‘False’ を返すからです。
正しいEnumの比較方法
Enumの値を比較する正しい方法は、’==’ 演算子を使用することです。
if Color.RED == Color.RED: # True
print('Same')
else:
print('Different')
このようにすると、Enumの値が同じであれば ‘True’ を返し、異なる場合は ‘False’ を返します。
また、Python 3.11では、str型と比較できるStrEnumの追加や、制約を検証できるverify()デコレータの追加がありました。
以上、PythonのEnumと比較演算子 ‘is’ の使用についての解説でした。Pythonを書く際には、これらの違いを理解しておくことが重要です。