在 Python 中将字符串与枚举进行比较
How to compare a string with an Enum in Python
要将字符串与枚举进行比较,str
请在声明枚举类时从该类扩展,例如class Color(str, Enum):
. 然后,您将能够使用相等运算符将字符串与枚举成员进行比较==
。
主程序
from enum import Enum class Color(str, Enum): RED = 'stop' GREEN = 'go' YELLOW = 'get ready' my_str = 'go' if my_str == Color.GREEN: # 👇️ this runs print('success') print(my_str == Color.YELLOW) # 👉️ False
该类Color
是两者的子类,str
这Enum
使得将字符串与枚举成员进行比较成为可能。
请注意,在使用派生枚举时有
一些规则:
- 子类
Enum
化时,在类之前指定混合类型Enum
。 - 虽然
Enum
可以有任何类型的成员,但一旦混合了其他类型,枚举中的所有成员都必须具有指定类型的值(例如
str
)。
或者,您可以使用value
枚举成员的属性并将值与字符串进行比较。
主程序
from enum import Enum class Color(Enum): RED = 'stop' GREEN = 'go' YELLOW = 'get ready' my_str = 'go' if my_str == Color.GREEN.value: # 👇️ this runs print('success') print(my_str == Color.YELLOW.value) # 👉️ False
我们使用value
枚举成员的属性来获取我们可以安全比较的字符串值。
主程序
from enum import Enum class Color(Enum): RED = 'stop' GREEN = 'go' YELLOW = 'get ready' print(Color.RED.value) # 👉️ 'stop' print(Color.GREEN.value) # 👉️ 'go' print(Color.YELLOW.value) # 👉️ 'get ready'
如果您事先不知道其名称,也可以使用方括号来访问枚举成员。
主程序
from enum import Enum class Color(Enum): RED = 'stop' GREEN = 'go' YELLOW = 'get ready' name_1 = 'RED' print(Color[name_1].value == 'stop') # 👉️ True
当您事先不知道枚举成员的名称时(因为它是从文件中读取或从 API 中获取的),这很有用。