On 5/29/2021 6:33 PM, Nick Coghlan
5/28/21 12:43 AM, Petr Viktorin wrote:
> On 28. 05. 21 5:24, Ethan Furman wrote:
>> class FlagWithMasks(IntFlag):
>> DEFAULT = 0x0
>> FIRST_MASK = 0xF
>> FIRST_ROUND = 0x0
>> FIRST_CEIL = 0x1
>> FIRST_TRUNC = 0x2
>> SECOND_MASK = 0xF0
>> SECOND_RECALC = 0x00
>> SECOND_NO_RECALC = 0x10
>> THIRD_MASK = 0xF00
>> THIRD_DISCARD = 0x000
>> THIRD_KEEP = 0x100
>> Here we have three flags (FIRST_MASK,
SECOND_MASK, THIRD_MASK) that are aliasing values
>> that don't exist, but it seems intentional and
not an error.
> Are you looking for a decorator for the whole Enum,
or a way to mark individual *values* as masks?
The decorator is for whole enum. The issue is not that
some values are masks, but whether the absence of named
covered by the mask is an error.
If you were prepared to incur a deprecation
period, then you could make the decorator "@allow_masks" and
flip the default behaviour to emit Deprecation Warning for
masks, eventually upgrading it to Value Error.
Otherwise, maybe something like "@no_masks"?
"Mask" is one typical usage for combined flags, but not the only
one. I would not recommend using "mask" in the name of the