枚举与Python3枚举元素

问题描述 投票:1回答:1

我设置可能的命令枚举“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]

谢谢你的帮助 !

python-3.x list enums
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.