python - Python enum.Flag 带有一个被其他人使用的标志
问题描述
我想定义一组标志(从 子类化enum.Flag
),其中一些标志是基于其他标志定义的。这类似于示例中的白旗:https ://docs.python.org/3/library/enum.html#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: unsupported operand type(s) for |: 'auto' and 'int'
工作实施应提供:
>>> print(bool(MyFlag.FIRST & MyFlag.DEFAULT))
# prints True
>>> print(bool(MyFlag.THIRD & MyFlag.DEFAULT))
# prints False
解决方案
1中的auto()
对象更加健壮:aenum
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披露:我是Python stdlibEnum
、enum34
backport和Advanced Enumeration ( aenum
) 库的作者。
推荐阅读
- python - Django:如果查询集注释中的任何值为空,如何返回无
- scala - 如何通过像 python pandas 这样的 spark 数据框中的列获取对?
- php - 从 Wordpress 本地上传插件时的权限问题
- karate - 如何获取将在场景中执行的所有细节
- python - 如果条件为假,如何返回变量名字符串?
- javascript - 当循环通过 HtmlTableElement 并转换为 json 时,它只转换第一个表 json object.but 不转换 socond object
- java - SpringBoot Rest Controller中与Jackson@JsonIgnore合作MongoDB延迟加载
- angular - 事件发射多级策略
- angular - Angular 7 observables 传递给子组件部分工作
- javascript - es6方法中函数内部的This值