Python 3.6+enumпонятие
enum.Flag
флаги
Перечисление битовых флагов: члены комбинируются операторами | & ^ ~.
Синтаксис
class C(enum.Flag): ...
Значения членов должны быть отдельными битами: auto() внутри Flag выдаёт 1, 2, 4 и так далее, а написанное руками 3 создаст не новый флаг, а псевдоним комбинации, который не появится при обходе класса. В отличие от IntFlag, член Flag не является числом, и это плюс: случайно сравнить или сложить его с посторонним int не выйдет. Пустая комбинация (значение 0) ложна в булевом контексте, так что обычная проверка на истинность отвечает на вопрос «взведён ли хоть один флаг».
Примеры
import enum
class Perm(enum.Flag):
R = 1
W = 2
X = 4
print((Perm.R | Perm.W).value) # → 3
print(Perm.R in (Perm.R | Perm.W)) # → True
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности