Call super in Generic.__init_subclass__ (#6356)

This commit is contained in:
Ivan Levkivskyi 2018-04-04 17:00:15 +01:00 committed by GitHub
parent 2eeac269dd
commit ee566fe526
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 0 deletions

View File

@ -1232,6 +1232,25 @@ class GenericTests(BaseTestCase):
class C(List[int], B): ... class C(List[int], B): ...
self.assertEqual(C.__mro__, (C, list, B, Generic, object)) self.assertEqual(C.__mro__, (C, list, B, Generic, object))
def test_init_subclass_super_called(self):
class FinalException(Exception):
pass
class Final:
def __init_subclass__(cls, **kwargs) -> None:
for base in cls.__bases__:
if base is not Final and issubclass(base, Final):
raise FinalException(base)
super().__init_subclass__(**kwargs)
class Test(Generic[T], Final):
pass
with self.assertRaises(FinalException):
class Subclass(Test):
pass
with self.assertRaises(FinalException):
class Subclass(Test[int]):
pass
def test_nested(self): def test_nested(self):
G = Generic G = Generic

View File

@ -850,6 +850,7 @@ class Generic:
return _GenericAlias(cls, params) return _GenericAlias(cls, params)
def __init_subclass__(cls, *args, **kwargs): def __init_subclass__(cls, *args, **kwargs):
super().__init_subclass__(*args, **kwargs)
tvars = [] tvars = []
if '__orig_bases__' in cls.__dict__: if '__orig_bases__' in cls.__dict__:
error = Generic in cls.__orig_bases__ error = Generic in cls.__orig_bases__