name for new Enum decorator

Ethan Furman ethan at stoneleaf.us
Thu May 27 23:23:29 EDT 2021


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?

--
~Ethan~


More information about the Python-list mailing list