mirror of
https://github.com/python/cpython.git
synced 2025-10-17 20:28:43 +00:00
gh-104600: Make type.__type_params__ writable (#104634)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
This commit is contained in:
parent
dbe171e609
commit
8f1f3b9abd
4 changed files with 71 additions and 15 deletions
|
@ -6810,6 +6810,19 @@ class NamedTupleTests(BaseTestCase):
|
|||
with self.assertRaises(TypeError):
|
||||
G[int, str]
|
||||
|
||||
def test_generic_pep695(self):
|
||||
class X[T](NamedTuple):
|
||||
x: T
|
||||
T, = X.__type_params__
|
||||
self.assertIsInstance(T, TypeVar)
|
||||
self.assertEqual(T.__name__, 'T')
|
||||
self.assertEqual(X.__bases__, (tuple, Generic))
|
||||
self.assertEqual(X.__orig_bases__, (NamedTuple, Generic[T]))
|
||||
self.assertEqual(X.__mro__, (X, tuple, Generic, object))
|
||||
self.assertEqual(X.__parameters__, (T,))
|
||||
self.assertEqual(X[str].__args__, (str,))
|
||||
self.assertEqual(X[str].__parameters__, ())
|
||||
|
||||
def test_non_generic_subscript(self):
|
||||
# For backward compatibility, subscription works
|
||||
# on arbitrary NamedTuple types.
|
||||
|
@ -7220,6 +7233,20 @@ class TypedDictTests(BaseTestCase):
|
|||
{'a': typing.Optional[T], 'b': int, 'c': str}
|
||||
)
|
||||
|
||||
def test_pep695_generic_typeddict(self):
|
||||
class A[T](TypedDict):
|
||||
a: T
|
||||
|
||||
T, = A.__type_params__
|
||||
self.assertIsInstance(T, TypeVar)
|
||||
self.assertEqual(T.__name__, 'T')
|
||||
self.assertEqual(A.__bases__, (Generic, dict))
|
||||
self.assertEqual(A.__orig_bases__, (TypedDict, Generic[T]))
|
||||
self.assertEqual(A.__mro__, (A, Generic, dict, object))
|
||||
self.assertEqual(A.__parameters__, (T,))
|
||||
self.assertEqual(A[str].__parameters__, ())
|
||||
self.assertEqual(A[str].__args__, (str,))
|
||||
|
||||
def test_generic_inheritance(self):
|
||||
class A(TypedDict, Generic[T]):
|
||||
a: T
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue