GH-114806. Don't specialize calls to classes with metaclasses. (GH-114870)

This commit is contained in:
Mark Shannon 2024-02-01 19:39:32 +00:00 committed by GitHub
parent 97cc58f977
commit e66d0399cc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 24 additions and 0 deletions

View file

@ -771,6 +771,22 @@ class ClassTests(unittest.TestCase):
with self.assertRaises(RecursionError):
add_one_level()
def testMetaclassCallOptimization(self):
calls = 0
class TypeMetaclass(type):
def __call__(cls, *args, **kwargs):
nonlocal calls
calls += 1
return type.__call__(cls, *args, **kwargs)
class Type(metaclass=TypeMetaclass):
def __init__(self, obj):
self._obj = obj
for i in range(100):
Type(i)
self.assertEqual(calls, 100)
if __name__ == '__main__':
unittest.main()