Skip to content

Commit 6ec0ade

Browse files
authored
[Enum] EnumMeta.__prepare__ now accepts **kwds (#23917)
1 parent 7ec59d8 commit 6ec0ade

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
@@ -178,7 +178,7 @@ class EnumMeta(type):
178178
Metaclass for Enum
179179
"""
180180
@classmethod
181-
def __prepare__(metacls, cls, bases):
181+
def __prepare__(metacls, cls, bases, **kwds):
182182
# check that previous enum members do not exist
183183
metacls._check_for_existing_members(cls, bases)
184184
# create the namespace dict

Lib/test/test_enum.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2119,7 +2119,7 @@ class ThirdFailedStrEnum(StrEnum):
21192119
one = '1'
21202120
two = b'2', 'ascii', 9
21212121

2122-
def test_init_subclass(self):
2122+
def test_init_subclass_calling(self):
21232123
class MyEnum(Enum):
21242124
def __init_subclass__(cls, **kwds):
21252125
super(MyEnum, cls).__init_subclass__(**kwds)
@@ -2155,6 +2155,16 @@ class NeverEnum(WhereEnum):
21552155
self.assertFalse(NeverEnum.__dict__.get('_test1', False))
21562156
self.assertFalse(NeverEnum.__dict__.get('_test2', False))
21572157

2158+
def test_init_subclass_parameter(self):
2159+
class multiEnum(Enum):
2160+
def __init_subclass__(cls, multi):
2161+
for member in cls:
2162+
member._as_parameter_ = multi * member.value
2163+
class E(multiEnum, multi=3):
2164+
A = 1
2165+
B = 2
2166+
self.assertEqual(E.A._as_parameter_, 3)
2167+
self.assertEqual(E.B._as_parameter_, 6)
21582168

21592169
@unittest.skipUnless(
21602170
sys.version_info[:2] == (3, 9),
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)