在 Python 中比较枚举
How to compare Enums in Python
使用value
每个枚举成员的属性来比较 Python 中的枚举,例如
Sizes.LARGE.value > Sizes.MEDIUM.value
. 枚举成员的value
属性返回可用于安全比较枚举值的文字。
主程序
class Sizes(Enum): SMALL = 1 MEDIUM = 2 LARGE = 3 # 👇️ True print(Sizes.LARGE.value > Sizes.MEDIUM.value) # 👇️ True print(Sizes.MEDIUM.value < Sizes.LARGE.value) # 👇️ False print(Sizes.SMALL.value == Sizes.LARGE.value)
我们使用value
枚举成员的属性来获取可以安全比较的整数值。
主程序
class Sizes(Enum): SMALL = 1 MEDIUM = 2 LARGE = 3 print(Sizes.SMALL.value) # 👉️ 1 print(Sizes.MEDIUM.value) # 👉️ 2 print(Sizes.LARGE.value) # 👉️ 3
如果您事先不知道其名称,也可以使用方括号来访问枚举成员。
主程序
class Sizes(Enum): SMALL = 1 MEDIUM = 2 LARGE = 3 name_1 = 'LARGE' name_2 = 'SMALL' # 👇️ True print(Sizes[name_1].value > Sizes[name_2].value)
当您事先不知道枚举成员的名称时(因为它是从文件中读取或从 API 中获取的),这很有用。
另一种方法是
从官方文档的OrderedEnum类扩展。
主程序
from enum import Enum class OrderedEnum(Enum): def __ge__(self, other): if self.__class__ is other.__class__: return self.value >= other.value return NotImplemented def __gt__(self, other): if self.__class__ is other.__class__: return self.value > other.value return NotImplemented def __le__(self, other): if self.__class__ is other.__class__: return self.value <= other.value return NotImplemented def __lt__(self, other): if self.__class__ is other.__class__: return self.value < other.value return NotImplemented # class Sizes(OrderedEnum): class Sizes(OrderedEnum): SMALL = 1 MEDIUM = 2 LARGE = 3 # 👇️ True print(Sizes.LARGE.value > Sizes.MEDIUM.value) # 👇️ True print(Sizes.MEDIUM.value < Sizes.LARGE.value) # 👇️ False print(Sizes.SMALL.value == Sizes.LARGE.value)
官方文档中的OrderedEnum
类示例是比较枚举的推荐方法(如果您不考虑访问value
属性枚举比较)。
请注意,该类不是从
enum
模块中导出的,因此我们必须复制并粘贴它才能使用它。该类实现了比较方法,因此我们不必这样做。