- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我刚刚发现 Enum 的存在python中的基类,我试图想象它对我有什么用处。
假设我定义了一个红绿灯状态:
from enum import Enum, auto
class Signal(Enum):
red = auto()
green = auto()
orange = auto()
假设我从程序中的某个子系统接收信息,以字符串的形式表示颜色名称,例如 brain_detected_colour = "red"
。
如何将此字符串与我的交通灯信号进行比较?
显然,brain_detected_colour is Signal.red
是 False
,因为 Signal.red
不是字符串。
Signal(brain_detected_colour) is Signal.red
失败并出现 ValueError: 'red' is not a valid Signal
。
最佳答案
一个人不会创建 instance of an Enum .Signal(foo)
语法用于按值访问 Enum 成员,当它们是 auto()
时不打算使用它们。
但是可以使用字符串到 access Enum members就像使用方括号访问 dict
中的值一样:
Signal[brain_detected_colour] is Signal.red
另一种可能性是将字符串与枚举成员的 name
进行比较:
# Bad practice:
brain_detected_colour is Signal.red.name
但在这里,我们不是在测试 Enum 成员之间的身份,而是比较字符串,所以使用相等测试是更好的做法:
# Better practice:
brain_detected_colour == Signal.red.name
(感谢 string interning,字符串之间的身份比较有效,最好不要依赖它。感谢@mwchase 和@Chris_Rands 让我意识到这一点。)
另一种可能性是在创建 Enum 时将成员值显式设置为其名称:
class Signal(Enum):
red = "red"
green = "green"
orange = "orange"
(请参阅 this answer 了解自动执行此操作的方法。)
那么,Signal(brain_detected_colour) is Signal.red
将是有效的。
关于python - 如何将字符串与python枚举进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44781681/
我是一名优秀的程序员,十分优秀!