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