我创建了一个 Enum 类,如下所示:
class MsgType(Enum):
# ADMINISTRATIVE MESSAGE
HEARTBEAT = "0"
LOGON = "A"
LOGOUT = "5"
REJECT_SESSION_LEVEL = "3"
RESEND_REQUEST = "2"
SEQUENCE_RESET = "4"
SESSION_REJECT = "3"
TEST_REQUEST = "1"
我想用这个类来比较我在阅读消息后得到的字符串。我正在比较如图所示的值。 msg_type
中的值是 str
类型。
def read_admin_msg(message):
msg_type = read_header(message)
if msg_type == ct.MsgType.HEARTBEAT:
print(msg_type)
elif msg_type == ct.MsgType.LOGON:
print(msg_type)
elif msg_type == ct.MsgType.LOGOUT:
print(msg_type)
elif msg_type == ct.MsgType.REJECT_SESSION_LEVEL:
print(msg_type)
elif msg_type == ct.MsgType.RESEND_REQUEST:
print(msg_type)
elif msg_type == ct.MsgType.SEQUENCE_RESET:
print(msg_type)
elif msg_type == ct.MsgType.SESSION_REJECT:
print(msg_type)
elif msg_type == ct.MsgType.TEST_REQUEST:
print(msg_type)
else:
print("Not found")
print(msg_type)
我的期望是对于 msg_type = "A"
语句 msg_type == ct.MsgType.LOGON
应该是 True
而不是 else
语句被执行。
如果我写 ct.MsgType.LOGON.value
然后我得到想要的结果。但我希望这种行为成为类(class)的默认行为。我应该重写哪种方法还是应该尝试不同的方法?
最佳答案
msg_type = "A"
是枚举的值。您需要更改相等比较的一侧。要么:
elif msg_type == MsgType.LOGON.value:
print(msg_type)
或者这个:
# This one is probably preferred
elif MsgType(msg_type) == MsgType.LOGON:
print(msg_type)
编辑:我现在看到你关于使用 .value
的声明。这就是这些枚举的工作方式......如果你想覆盖 MsgType
类上的 __eq__
,你可以。但是你会在这个过程中破坏 Enums
的默认相等比较,并且你必须在那里进行特殊类型检查以检查你的左侧/右侧是否是字符串/枚举/等.我只是让您的 read_header
函数返回 Enum 的一个实例,而不是字符串值。
关于python - 比较时如何默认获取Enum值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52331085/