列挙型の比較
列挙メンバーは順序付けされていないため、同一性と等価性による比較のみをサポートします。 == の使用法を見てみましょう:
#!/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))
出力結(jié)果:
False True False True Error : '<' not supported between instances of 'User' and 'User'
最終的な出力結(jié)果を見て、例外を報(bào)告できます。 「大なり」と「小なり」の比較演算子は、TypeError 例外を発生させます。つまり、Enum クラスの列挙では、サイズ演算子の比較がサポートされません。
それでは、列挙型クラスを使用してサイズを比較できるのでしょうか?
もちろん可能ですが、列挙に IntEnum クラスを使用すると、比較機(jī)能がサポートされます。
#!/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))
出力結(jié)果を確認(rèn)します:
Tom Liangdianshui Twowater
出力結(jié)果から、列挙型クラスのメンバーが値のサイズによって並べ替えられていることがわかります。つまり、大きさの比較ができるのです。