Although ENUMs are already complicated enough, this proposals frees up
messing with the EnumMeta metaclass in some cases -
it makes sense.

I've subclassed EnumMeta once for adding some feature in a project, and it
never feels the "quite right" thing to do.

On Tue, Apr 26, 2022 at 6:12 PM Stefan Nelson-Lindall <
stefan.nelsonlind...@gmail.com> wrote:

> EnumMeta implements its own __getitem__ function which doesn't respect
> __class_getitem__. Now that __class_getitem__ exists, this behavior feels
> unintuitive. For instance
>
> ```
> class Directions(enum.Enum):
>   LEFT = "LEFT"
>   RIGHT = "RIGHT"
>
>   def __class_getitem__(cls, name):
>     return super().__class_getitem__(name.upper())
>
> # fails with KeyError -- __class_getitem__ never called
> assert Directions["left"] == Directions["LEFT"] == Directions.LEFT
> ```
>
> doesn't work, and the only way to implement this behavior is something like
>
> ```
> class MyEnumMeta(enum.EnumMeta):
>   def __getitem__(cls, name):
>     return cls.__class_getitem__(name)
>
> class MyEnum(enum.Enum, metaclass=MyEnumMeta):
>   def __class_getitem__(cls, name):
>     return cls._member_map_[name]
>
> class Directions(MyEnum): ...
> ```
>
> there might be some compatibility issues with code written between 3.4 and
> 3.11, but not supporting __class_getitem__ feels like it violates the
> principle of least surprise with the more recent data models.
> _______________________________________________
> Python-ideas mailing list -- python-ideas@python.org
> To unsubscribe send an email to python-ideas-le...@python.org
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-ideas@python.org/message/4VURZ4ZXPZRQ726KZH5DAOI47XXUKBI2/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/NSN667S6QVHSV74XSZ6LFT5JNIRHFYFO/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to