bpo-42385: [Enum] add `_generate_next_value_` to StrEnum (GH-23735)
The default for auto() is to return an integer, which doesn't work for `StrEnum`. The new `_generate_next_value_` for `StrEnum` returns the member name, lower cased.
This commit is contained in:
parent
9fc571359a
commit
efb13be72c
|
@ -67,10 +67,12 @@ helper, :class:`auto`.
|
|||
|
||||
.. class:: auto
|
||||
|
||||
Instances are replaced with an appropriate value for Enum members. By default, the initial value starts at 1.
|
||||
Instances are replaced with an appropriate value for Enum members.
|
||||
:class:`StrEnum` defaults to the lower-cased version of the member name,
|
||||
while other Enums default to 1 and increase from there.
|
||||
|
||||
.. versionadded:: 3.6 ``Flag``, ``IntFlag``, ``auto``
|
||||
|
||||
.. versionadded:: 3.10 ``StrEnum``
|
||||
|
||||
Creating an Enum
|
||||
----------------
|
||||
|
|
|
@ -826,6 +826,12 @@ class StrEnum(str, Enum):
|
|||
|
||||
__str__ = str.__str__
|
||||
|
||||
def _generate_next_value_(name, start, count, last_values):
|
||||
"""
|
||||
Return the lower-cased version of the member name.
|
||||
"""
|
||||
return name.lower()
|
||||
|
||||
|
||||
def _reduce_ex_by_name(self, proto):
|
||||
return self.name
|
||||
|
|
|
@ -2179,6 +2179,12 @@ class TestEnum(unittest.TestCase):
|
|||
self.assertEqual(Private._Private__corporal, 'Radar')
|
||||
self.assertEqual(Private._Private__major_, 'Hoolihan')
|
||||
|
||||
def test_strenum_auto(self):
|
||||
class Strings(StrEnum):
|
||||
ONE = auto()
|
||||
TWO = auto()
|
||||
self.assertEqual([Strings.ONE, Strings.TWO], ['one', 'two'])
|
||||
|
||||
|
||||
class TestOrder(unittest.TestCase):
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
StrEnum: fix _generate_next_value_ to return a str
|
Loading…
Reference in New Issue