Python 3.6+enumпонятие
enum.IntFlag
флаги
Битовые флаги, которые ещё и int: комбинируются и сравниваются как числа.
Синтаксис
class C(enum.IntFlag): ...
У IntFlag по умолчанию boundary=KEEP: значение с битом, которого нет ни в одном члене, не бросит ошибку, а сохранится как есть — испорченную маску придётся ловить самому. Плюс член свободно сравнивается и участвует в арифметике с обычными int, так что смешать его с посторонним числом легко. Разумно брать IntFlag там, где значение уходит наружу — в системный вызов, флаги re, упакованное битовое поле; для внутренней логики чище Flag.
Примеры
import enum
class Mode(enum.IntFlag):
A = 1
B = 2
print((Mode.A | Mode.B) == 3) # → True
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности