[Python-Dev] Re: name for new Enum decorator

2021年5月28日 00:54:37 -0700

On 5/28/2021 12:08 AM, Michał Górny wrote:
On Thu, 2021年05月27日 at 20:24 -0700, Ethan Furman wrote:
Greetings!
The Flag type in the enum module has had some improvements, but I find it 
necessary to move one of those improvements
into a decorator instead, and I'm having a hard time thinking up a name.
What is the behavior? Well, a name in a flag type can be either canonical (it 
represents one thing), or aliased (it
represents two or more things). To use Color as an example:
 class Color(Flag):
 RED = 1 # 0001
 GREEN = 2 # 0010
 BLUE = 4 # 0100
 PURPLE = RED | BLUE # 0101
 WHITE = RED | GREEN | BLUE # 0111
The flags RED, GREEN, and BLUE are all canonical, while PURPLE and WHITE are 
aliases for certain flag combinations. But
what if we have something like:
 class Color(Flag):
 RED = 1 # 0001
 BLUE = 4 # 0100
 WHITE = 7 # 0111
As you see, WHITE is an "alias" for a value that does not exist in the Flag 
(0010, or 2). That seems like it's probably
an error. But what about this?
 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.
So, like the enum.unique decorator that can be used when duplicate names should 
be an error, I'm adding a new decorator
to verify that a Flag has no missing aliased values that can be used when the 
programmer thinks it's appropriate... but
I have no idea what to call it.
Any nominations?
Maybe something like the following would be a good starting point:
@bitmask_require_individual_bits
@all_bits_defined
or
@unique_bits
_______________________________________________
Python-Dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/[email protected]/message/NE5UYXEUZ6KKHVH3Z2OX45SSWCXYEYYO/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to