Skip to content

Commit 3234720

Browse files
sobolevnpull[bot]
authored andcommitted
gh-118569: Add a test for dynamic PEP695 classes (#118570)
1 parent c63d324 commit 3234720

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

Lib/test/test_type_params.py

+25
Original file line numberDiff line numberDiff line change
@@ -776,6 +776,31 @@ class D[U](T):
776776
self.assertIn(int, C.D.__bases__)
777777
self.assertIs(C.D.x, str)
778778

779+
780+
class DynamicClassTest(unittest.TestCase):
781+
def _set_type_params(self, ns, params):
782+
ns['__type_params__'] = params
783+
784+
def test_types_new_class_with_callback(self):
785+
T = TypeVar('T', infer_variance=True)
786+
Klass = types.new_class('Klass', (Generic[T],), {},
787+
lambda ns: self._set_type_params(ns, (T,)))
788+
789+
self.assertEqual(Klass.__bases__, (Generic,))
790+
self.assertEqual(Klass.__orig_bases__, (Generic[T],))
791+
self.assertEqual(Klass.__type_params__, (T,))
792+
self.assertEqual(Klass.__parameters__, (T,))
793+
794+
def test_types_new_class_no_callback(self):
795+
T = TypeVar('T', infer_variance=True)
796+
Klass = types.new_class('Klass', (Generic[T],), {})
797+
798+
self.assertEqual(Klass.__bases__, (Generic,))
799+
self.assertEqual(Klass.__orig_bases__, (Generic[T],))
800+
self.assertEqual(Klass.__type_params__, ()) # must be explicitly set
801+
self.assertEqual(Klass.__parameters__, (T,))
802+
803+
779804
class TypeParamsManglingTest(unittest.TestCase):
780805
def test_mangling(self):
781806
class Foo[__T]:

0 commit comments

Comments
 (0)