Steve Jorgensen wrote:
> After messing around with Enum for a while, there's one small thing that
> I'd like to see improved. It seems limiting to me that the only way to trigger
> _generate_next_value is to pass auto().
> What if, for a particular Enum, I would like to be able to use
> () as a shorthand for auto()? How about a more complex
> auto-generation that determines the final value based on both the given value
> and the
> name/key
What's wrong with `auto()`? Why do you need a shorthand for that? Also `()` is
an empty tuple so it's just another enum value.
> As an example of the second case, start with an Enum subclas in which each
> item, by default, has the name/key as its value and a prettified version of
> the name as
> its label, but one can also specify the value and label using a 2-item tuple
> for the
> value. Now, let's say we want to be able to specify a custom label and still
> use the
> name/key as the value either as a None/label tuple or as a string starting
> with a
> comma.
It seems that your second case can be accomplished by using a custom descriptor
that receives the field name via `__set_name__`. For example:
from enum import Enum
class Value:
def __init__(self, val):
self.val = val
self.name = None
def __set_name__(self, owner, name):
self.name = name
def __get__(self, instance, owner=None):
return f'{self.name} {self.val}'
def __set__(self, instance, value):
raise AttributeError
class MyEnum(Enum):
RED = Value(1)
GREEN = Value(2)
BLUE = Value(3)
> Using a custom test for auto, one could identify those cases, Passing the
> assigned
> value to the _generate_next_value_ function would allow it to make use of
> that information. For backward compatibility, the signature of the
> _generate_next_value_ function can be checked to make sure it can accept the
> extra argument for that before passing that.
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/6GVFYIT6JYAWFYK6BY53AJSGQRB5L5Y6/
Code of Conduct: http://python.org/psf/codeofconduct/