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

2021年5月28日 00:19:50 -0700

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
-- 
Best regards,
Michał Górny
_______________________________________________
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/PPPCZGMDH47UPGH6RKVXNQQX3IQ2AMCS/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to