• 四、枚举的比较

    四、枚举的比较

    因为枚举成员不是有序的,所以它们只支持通过标识(identity) 和相等性 (equality) 进行比较。下面来看看 ==is 的使用:

    1. #!/usr/bin/env python3
    2. # -*- coding: UTF-8 -*-
    3. from enum import Enum
    4. class User(Enum):
    5. Twowater = 98
    6. Liangdianshui = 30
    7. Tom = 12
    8. Twowater = User.Twowater
    9. Liangdianshui = User.Liangdianshui
    10. print(Twowater == Liangdianshui, Twowater == User.Twowater)
    11. print(Twowater is Liangdianshui, Twowater is User.Twowater)
    12. try:
    13. print('\n'.join(' ' + s.name for s in sorted(User)))
    14. except TypeError as err:
    15. print(' Error : {}'.format(err))

    输出的结果:

    1. False True
    2. False True
    3. Error : '<' not supported between instances of 'User' and 'User'

    可以看看最后的输出结果,报了个异常,那是因为大于和小于比较运算符引发 TypeError 异常。也就是 Enum 类的枚举是不支持大小运算符的比较的。

    那么能不能让枚举类进行大小的比较呢?

    当然是可以的,使用 IntEnum 类进行枚举,就支持比较功能。

    1. #!/usr/bin/env python3
    2. # -*- coding: UTF-8 -*-
    3. import enum
    4. class User(enum.IntEnum):
    5. Twowater = 98
    6. Liangdianshui = 30
    7. Tom = 12
    8. try:
    9. print('\n'.join(s.name for s in sorted(User)))
    10. except TypeError as err:
    11. print(' Error : {}'.format(err))

    看看输出的结果:

    1. Tom
    2. Liangdianshui
    3. Twowater

    通过输出的结果可以看到,枚举类的成员通过其值得大小进行了排序。也就是说可以进行大小的比较。