2.1.3 比較Enum
由于枚舉成員是無序的,是以它們隻支援按同一性和相等性進行比較。
import enum
class BugStatus(enum.Enum):
new = 7
incomplete = 6
invalid = 5
wont_fix = 4
in_progress = 3
fix_committed = 2
fix_relessed = 1
actual_state = BugStatus.wont_fix
desired_state = BugStatus.fix_relessed
print('Equality:',
actual_state == desired_state,
actual_state == BugStatus.wont_fix)
print('Identity:',
actual_state is desired_state,
actual_state is BugStatus.wont_fix)
print('Ordered by value:')
try:
print('\n'.join(' ' + s.name for s in sorted(BugStatus)))
except TypeError as err:
print(' Cannot sort:{}'.format(err))
大于和小于比較符會産生TypeError異常。
運作結果:
Equality: False True
Identity: False True
Ordered by value:
Cannot sort:’<’ not supported between instances of ‘BugStatus’ and ‘BugStatus’
有些枚舉中的成員要表現得更像數字,例如,要支援比較,對于這些枚舉要使用IntEnum類。
import enum
class BugStatus(enum.IntEnum):
new = 7
incomplete = 6
invalid = 5
wont_fix = 4
in_progress = 3
fix_committed = 2
fix_relesed = 1
print('Ordered by value:')
print('\n'.join(' ' + s.name for s in sorted(BugStatus)))
運作結果:
Ordered by value:
fix_relesed
fix_committed
in_progress
wont_fix
invalid
incomplete
new