Класс enum.FlagBoundary
управляет тем, как обрабатываются недопустимые значения в перечислении enum.Flag
и его подклассах.
Добавлен в Python 3.11.
STRICT
:Значения вне допустимого диапазона приводят к возникновению ошибки ValueError
. Это значение по умолчанию для enum.Flag
:
from enum import Flag, STRICT class StrictFlag(Flag, boundary=STRICT): RED = auto() GREEN = auto() BLUE = auto() >>> StrictFlag(2**2 + 2**4) # Traceback (most recent call last): # ... # ValueError: <flag 'StrictFlag'> invalid value 20 # given 0b0 10100 # allowed 0b0 00111
CONFORM
:Недопустимые значения, выходящие за пределы допустимого диапазона, будут удалены. Остаются только действительные значение Flag
:
from enum import Flag, CONFORM class ConformFlag(Flag, boundary=CONFORM): RED = auto() GREEN = auto() BLUE = auto() >>> ConformFlag(2**2 + 2**4) # <ConformFlag.BLUE: 4>
EJECT
:Значения вне диапазона теряют принадлежность к флагу и возвращаются к типу int
. Это значение по умолчанию для enum.IntFlag
:
from enum import Flag, EJECT class EjectFlag(Flag, boundary=EJECT): RED = auto() GREEN = auto() BLUE = auto() >>> EjectFlag(2**2 + 2**4) # 20
KEEP
:Значения вне допустимого диапазона сохраняются, а принадлежность к флагу сохраняется. Это используется для некоторых флагов stdlib
:
from enum import Flag, KEEP class KeepFlag(Flag, boundary=KEEP): RED = auto() GREEN = auto() BLUE = auto() >>> KeepFlag(2**2 + 2**4) # <KeepFlag.BLUE|16: 20>