因為枚舉成員不是有序的,所以它們只支持通過標識(identity) 和相等性 (equality) 進行比較。下面來看看 == 和 is 的使用:
#!/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'
可以看看最后的輸出結果,報了個異常,那是因為大于和小于比較運算符引發(fā) 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
通過輸出的結果可以看到,枚舉類的成員通過其值得大小進行了排序。也就是說可以進行大小的比較。