gpt4 book ai didi

python - 将值映射到相关值的枚举函数

转载 作者:行者123 更新时间:2023-11-28 21:35:02 26 4
gpt4 key购买 nike

目前,我有一个代表名称/数字映射的枚举。然而,每个 EventType 也有额外的“相关属性”(例如状态代码和消息类型)。

class EventType(Enum):
CANCELLED = 0
ONTIME = 1
DELAYED = 2

def get_status(self):
if self == EventType.CANCELLED:
return "statuscode1"
elif self == EventType.DELAYED:
return "statuscode2"
else:
return "statuscode3"

def get_message_type(self):
if self == EventType.CANCELLED:
return "messagetype1"
elif self == EventType.DELAYED:
return "messagetype2"
else:
return "messagetype3"

不是创建上面的方法和大量的 if 链检查 self ,有没有更清晰的重构方法来返回状态代码和消息类型?这几乎就像 CANCELLED = (0, statuscode1, messagetype1).. 我如何在枚举中表示这个概念?枚举甚至是执行此操作的正确方法吗?

最佳答案

如果您希望Enum成员的值为012,那么您将需要覆盖 __new__,或使用 aenum

使用aenum1:

from aenum import MultiValueEnum

class EventType(MultiValueEnum):
_init_ = 'value status message'
CANCELLED = 0, 'status1', 'message1'
ONTIME = 1, 'status2', 'message2'
DELAYED = 2, 'status3', 'message3'

并在使用中:

>>> print(EventType.ONTIME)
EventType.ONTIME
>>> print(EventType.ONTIME.value)
1
>>> print(EventType.ONTIME.status)
status2
>>> print(EventType.ONTIME.message)
message2

参见 this answer有关如何使用 stdlib Enum(使用覆盖 __new__ 技术)执行此操作的示例。


1 披露:我是 Python stdlib Enum 的作者, enum34 backport , 和 Advanced Enumeration (aenum)图书馆。

关于python - 将值映射到相关值的枚举函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52765638/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com