Python enum.Flag,其中一个标志由其他一些人使用

Python enum.Flag,其中一个标志由其他一些人使用,python,enums,enum-flags,Python,Enums,Enum Flags,我想定义一组从enum.Flag子类化的标志,其中一些标志是基于其他标志定义的。这类似于示例中的白色标志:,但它不仅仅是以前标志的组合,还需要它自己的值 我的第一次尝试是: from enum import Flag, auto class MyFlag(Flag): NONE = 0 DEFAULT = auto() FIRST = auto() | DEFAULT SECOND = auto() | DEFAULT THIRD = auto()

我想定义一组从enum.Flag子类化的标志,其中一些标志是基于其他标志定义的。这类似于示例中的白色标志:,但它不仅仅是以前标志的组合,还需要它自己的值

我的第一次尝试是:

from enum import Flag, auto
class MyFlag(Flag):
    NONE = 0
    DEFAULT = auto()
    FIRST = auto() | DEFAULT
    SECOND = auto() | DEFAULT
    THIRD = auto()
    ANY = FIRST | SECOND | THIRD
但这引发了一个错误: TypeError:|:'auto'和'int'的操作数类型不受支持

工作实施应提供:

>>> print(bool(MyFlag.FIRST & MyFlag.DEFAULT))
# prints True
>>> print(bool(MyFlag.THIRD & MyFlag.DEFAULT))
# prints False

下面通过定义MyFlag类的隐藏成员来实现

aenum1中的自动对象更为健壮:

from aenum import Flag, auto

class MyFlag(Flag):
    NONE = 0
    DEFAULT = auto()
    FIRST = auto() | DEFAULT
    SECOND = auto() | DEFAULT
    THIRD = auto()
    ANY = FIRST | SECOND | THIRD
在使用中:

>>> list(MyFlag)
[
    <MyFlag.NONE: 0>,
    <MyFlag.DEFAULT: 1>,
    <MyFlag.FIRST: 3>,
    <MyFlag.SECOND: 5>,
    <MyFlag.THIRD: 8>,
    <MyFlag.ANY: 15>,
    ]

1披露:我是、和库的作者。

这与我想象的代码编写方式完全相同。我去看看安纳姆。谢谢
>>> list(MyFlag)
[
    <MyFlag.NONE: 0>,
    <MyFlag.DEFAULT: 1>,
    <MyFlag.FIRST: 3>,
    <MyFlag.SECOND: 5>,
    <MyFlag.THIRD: 8>,
    <MyFlag.ANY: 15>,
    ]