天天看點

第二章:資料結構-enum:枚舉類型-比較Enum

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

繼續閱讀