Skip to content

Commit f7dca9b

Browse files
authored
[3.9] bpo-42727: [Enum] EnumMeta.__prepare__ now accepts **kwds (GH-23917). (GH-23926)
* [3.9] [Enum] EnumMeta.__prepare__ now accepts **kwds (GH-23917). (cherry picked from commit 6ec0ade)
1 parent 3bb8567 commit f7dca9b

3 files changed

Lines changed: 14 additions & 2 deletions

File tree

Lib/enum.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ class EnumMeta(type):
170170
Metaclass for Enum
171171
"""
172172
@classmethod
173-
def __prepare__(metacls, cls, bases):
173+
def __prepare__(metacls, cls, bases, **kwds):
174174
# check that previous enum members do not exist
175175
metacls._check_for_existing_members(cls, bases)
176176
# create the namespace dict

Lib/test/test_enum.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2065,7 +2065,7 @@ class Private(Enum):
20652065
except ValueError:
20662066
pass
20672067

2068-
def test_init_subclass(self):
2068+
def test_init_subclass_calling(self):
20692069
class MyEnum(Enum):
20702070
def __init_subclass__(cls, **kwds):
20712071
super(MyEnum, cls).__init_subclass__(**kwds)
@@ -2101,6 +2101,16 @@ class NeverEnum(WhereEnum):
21012101
self.assertFalse(NeverEnum.__dict__.get('_test1', False))
21022102
self.assertFalse(NeverEnum.__dict__.get('_test2', False))
21032103

2104+
def test_init_subclass_parameter(self):
2105+
class multiEnum(Enum):
2106+
def __init_subclass__(cls, multi):
2107+
for member in cls:
2108+
member._as_parameter_ = multi * member.value
2109+
class E(multiEnum, multi=3):
2110+
A = 1
2111+
B = 2
2112+
self.assertEqual(E.A._as_parameter_, 3)
2113+
self.assertEqual(E.B._as_parameter_, 6)
21042114

21052115
class TestOrder(unittest.TestCase):
21062116

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
`EnumMeta.__prepare__` now accepts `**kwds` to properly support
2+
`__init_subclass__`

0 commit comments

Comments
 (0)