列挙型の比較
列挙メンバーは順序付けされていないため、同一性と等価性による比較のみをサポートします。 == の使用法を見てみましょう:
#!/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
出力結果から、列挙型クラスのメンバーが値のサイズによって並べ替えられていることがわかります。つまり、大きさの比較ができるのです。