bpo-42851: [Enum] remove brittle __init_subclass__ support (GH-24154) · python/cpython@a581a86 · GitHub
Skip to content

Commit a581a86

Browse files
authored
bpo-42851: [Enum] remove brittle __init_subclass__ support (GH-24154)
Solution to support calls to `__init_subclass__` with members defined is too brittle and breaks with certain mixins.
1 parent 8643345 commit a581a86

3 files changed

Lines changed: 2 additions & 75 deletions

File tree

Lib/enum.py

Lines changed: 1 addition & 30 deletions

Lib/test/test_enum.py

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

2122-
def test_init_subclass_calling(self):
2123-
class MyEnum(Enum):
2124-
def __init_subclass__(cls, **kwds):
2125-
super(MyEnum, cls).__init_subclass__(**kwds)
2126-
self.assertFalse(cls.__dict__.get('_test', False))
2127-
cls._test1 = 'MyEnum'
2128-
#
2129-
class TheirEnum(MyEnum):
2130-
def __init_subclass__(cls, **kwds):
2131-
super().__init_subclass__(**kwds)
2132-
cls._test2 = 'TheirEnum'
2133-
class WhoseEnum(TheirEnum):
2134-
def __init_subclass__(cls, **kwds):
2135-
pass
2136-
class NoEnum(WhoseEnum):
2137-
ONE = 1
2138-
self.assertEqual(TheirEnum.__dict__['_test1'], 'MyEnum')
2139-
self.assertEqual(WhoseEnum.__dict__['_test1'], 'MyEnum')
2140-
self.assertEqual(WhoseEnum.__dict__['_test2'], 'TheirEnum')
2141-
self.assertFalse(NoEnum.__dict__.get('_test1', False))
2142-
self.assertFalse(NoEnum.__dict__.get('_test2', False))
2143-
#
2144-
class OurEnum(MyEnum):
2145-
def __init_subclass__(cls, **kwds):
2146-
cls._test2 = 'OurEnum'
2147-
class WhereEnum(OurEnum):
2148-
def __init_subclass__(cls, **kwds):
2149-
pass
2150-
class NeverEnum(WhereEnum):
2151-
ONE = 'one'
2152-
self.assertEqual(OurEnum.__dict__['_test1'], 'MyEnum')
2153-
self.assertFalse(WhereEnum.__dict__.get('_test1', False))
2154-
self.assertEqual(WhereEnum.__dict__['_test2'], 'OurEnum')
2155-
self.assertFalse(NeverEnum.__dict__.get('_test1', False))
2156-
self.assertFalse(NeverEnum.__dict__.get('_test2', False))
21572122

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)
21682123

21692124
@unittest.skipUnless(
21702125
sys.version_info[:2] == (3, 9),
Lines changed: 1 addition & 0 deletions

0 commit comments

Comments
 (0)