如何在 Python 中比较枚举

在 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模块中导出的,因此我们必须复制并粘贴它才能使用它。

该类实现了比较方法,因此我们不必这样做。

发表评论