name for new Enum decorator

hw hw at adminart.net
Sun May 30 02:10:40 EDT 2021


On 5/28/21 5:23 AM, 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?

Why don't you just use the colour names from rgb.txt and their values? 
That's plain, simple and pretty standard.


More information about the Python-list mailing list