列挙型の比較

列挙メンバーは順序付けされていないため、同一性と等価性による比較のみをサポートします。 == の使用法を見てみましょう:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
from enum import Enum
class User(Enum):
    Twowater = 98
    Liangdianshui = 30
    Tom = 12
Twowater = User.Twowater
Liangdianshui = User.Liangdianshui
print(Twowater == Liangdianshui, Twowater == User.Twowater)
print(Twowater is Liangdianshui, Twowater is User.Twowater)
try:
    print('\n'.join('  ' + s.name for s in sorted(User)))
except TypeError as err:
    print(' Error : {}'.format(err))

出力結果:

False True
False True
 Error : '<' not supported between instances of 'User' and 'User'

最終的な出力結果を見て、例外を報告できます。 「大なり」と「小なり」の比較演算子は、TypeError 例外を発生させます。つまり、Enum クラスの列挙では、サイズ演算子の比較がサポートされません。

それでは、列挙型クラスを使用してサイズを比較できるのでしょうか?

もちろん可能ですが、列挙に IntEnum クラスを使用すると、比較機能がサポートされます。

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import enum
class User(enum.IntEnum):
    Twowater = 98
    Liangdianshui = 30
    Tom = 12
try:
    print('\n'.join(s.name for s in sorted(User)))
except TypeError as err:
    print(' Error : {}'.format(err))

出力結果を確認します:

Tom
Liangdianshui
Twowater

出力結果から、列挙型クラスのメンバーが値のサイズによって並べ替えられていることがわかります。つまり、大きさの比較ができるのです。

学び続ける
  • おすすめコース
  • コースウェアのダウンロード
現時点ではコースウェアはダウンロードできません。現在スタッフが整理中です。今後もこのコースにもっと注目してください〜