我非常困惑为什么这两个都不起作用。有人能帮我理解发生了什么,以及为什么它会打印“BAD”和“值不存在”吗?
from enum import Enum
class EventType(Enum):
USER_LOGIN = 1,
USER_LOGOUT = 2,
@classmethod
def has_value(cls, value):
return value in cls._value2member_map_
eventType = 2
if not EventType.has_value(eventType):
print("BAD")
else:
print("GOOD")
if eventType in EventType.__members__.values():
print("Value exists")
else:
print("Value does not exist")
正如@msanford 在评论中所说,从你的值中删除尾随的逗号 - 它们正在创建元组。
为了帮助您调试它,请尝试查看它的
cls._value2member_map_
真实样子。在我的 python3.12 安装中,我得到以下输出:
这有助于解释这一点——枚举常量在内部存储为元组(我不明白为什么——看起来评论部分抓住了它)
如果可以的话,我建议将基类更改为
IntEnum
并利用此in
语法来使用记录的技术来测试成员资格,如下所示:编辑:如果您将常量定义修复为不是元组,那么您可以将其用作
enum.Enum
基类并避免IntEnum
其他人在评论中描述的陷阱。