Python enum.Flag,其中一个标志由其他一些人使用
我想定义一组从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()
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>,
]