Skip to content

Commit bd85c97

Browse files
Call super in Generic.__init_subclass__ (GH-6356)
(cherry picked from commit ee566fe) Co-authored-by: Ivan Levkivskyi <[email protected]>
1 parent 785f36c commit bd85c97

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

Lib/test/test_typing.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1232,6 +1232,25 @@ class B(Generic[S]): ...
12321232
class C(List[int], B): ...
12331233
self.assertEqual(C.__mro__, (C, list, B, Generic, object))
12341234

1235+
def test_init_subclass_super_called(self):
1236+
class FinalException(Exception):
1237+
pass
1238+
1239+
class Final:
1240+
def __init_subclass__(cls, **kwargs) -> None:
1241+
for base in cls.__bases__:
1242+
if base is not Final and issubclass(base, Final):
1243+
raise FinalException(base)
1244+
super().__init_subclass__(**kwargs)
1245+
class Test(Generic[T], Final):
1246+
pass
1247+
with self.assertRaises(FinalException):
1248+
class Subclass(Test):
1249+
pass
1250+
with self.assertRaises(FinalException):
1251+
class Subclass(Test[int]):
1252+
pass
1253+
12351254
def test_nested(self):
12361255

12371256
G = Generic

Lib/typing.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -850,6 +850,7 @@ def __class_getitem__(cls, params):
850850
return _GenericAlias(cls, params)
851851

852852
def __init_subclass__(cls, *args, **kwargs):
853+
super().__init_subclass__(*args, **kwargs)
853854
tvars = []
854855
if '__orig_bases__' in cls.__dict__:
855856
error = Generic in cls.__orig_bases__

0 commit comments

Comments
 (0)