我设置可能的命令枚举“A”在我的Python代码。我还要创造另一个枚举“B”列出一些具体的命令“A”。
因此,我想:
class all_commands(IntEnum):
SET_ELEMENT_A = 0x00000001
GET_ELEMENT_A = 0x00000007
GET_ELEMENT_B = 0x0000000E
SET_ELEMENT_C = 0x00000010
GET_ELEMENT_C = 0x00000011
GET_ELEMENT_D = 0x00000015
class getter_commands(IntEnum):
all_commands.GET_ELEMENT_A
all_commands.GET_ELEMENT_B
all_commands.GET_ELEMENT_C
all_commands.GET_ELEMENT_D
这似乎是正确的我,但是当我尝试
all_commands.GET_ELEMENT_A in getter_commands
我得到一个False
结果值。
那是一种正常的行为?或者是我的代码错了吗?
我试图用一个列表,其中有all_commands.GET_ELEMENT_A
作品,但我认为一个Enum
类型会更好
getter_commands = [all_commands.GET_ELEMENT_A,
all_commands.GET_ELEMENT_B,
all_commands.GET_ELEMENT_C,
all_commands.GET_ELEMENT_D]
谢谢你的帮助 !
Enum
是不是解决你的问题。你需要的是像一个EnumSet
这将使迭代,遏制支票,和属性的访问。所以东西是像创建:
getter_commands = EnumSet(
all_commands.GET_ELEMENT_A,
all_commands.GET_ELEMENT_B,
all_commands.GET_ELEMENT_C,
all_commands.GET_ELEMENT_D,
)
并与行为:
>>> list(getter_commands)
[all_commands.GET_ELEMENT_A, all_commands.GET_ELEMENT_B, all_commands.GET_ELEMENT_C, all_commands.GET_ELEMENT_D]
>>> getter_commands.GET_ELEMENT_C
<all_commands.GET_ELEMENT_C: 16>
>>> all_commands.GET_ELEMENT_D in getter_commands
True
>> all_commands.SET_ELEMENT_A in getter_commands
False
这种对象可能是这样的:
class EnumSet:
def __init__(self, *enum_members):
self.__dict__.update({m._name: m for m in enum_members})
__iter__ = self.__dict__.values