ap1*_*p14 5 python enums python-3.x
我创建了一个 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"
Run Code Online (Sandbox Code Playgroud)
我想使用这个类与我在阅读消息后得到的字符串进行比较。我正在比较如图所示的值。中的值msg_type是 a 类型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)
Run Code Online (Sandbox Code Playgroud)
我希望,因为msg_type = "A"语句msg_type == ct.MsgType.LOGON应该是True但else语句被执行。
如果我写,ct.MsgType.LOGON.value那么我会得到想要的结果。但我希望这种行为成为班级的默认行为。我应该覆盖哪种方法还是应该尝试不同的方法?
msg_type = "A"是枚举的值。您需要改变平等比较的一侧。任何一个:
elif msg_type == MsgType.LOGON.value:
print(msg_type)
Run Code Online (Sandbox Code Playgroud)
或这个:
# This one is probably preferred
elif MsgType(msg_type) == MsgType.LOGON:
print(msg_type)
Run Code Online (Sandbox Code Playgroud)
编辑:我看到你关于.value现在使用的声明。这就是这些枚举的工作原理......如果你想覆盖__eq__你的MsgType类上的 ,你可以。但是你会Enums在这个过程中打破默认的相等比较,并且你必须在那里进行特殊的类型检查,以检查你的左/右侧是否是字符串/枚举/等。我只是让你的read_header函数返回枚举的实例,而不是字符串值。
| 归档时间: |
|
| 查看次数: |
2362 次 |
| 最近记录: |