mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-43923: Add support for generic typing.NamedTuple (#92027)
This commit is contained in:
parent
81fb3548be
commit
b04e02c57f
5 changed files with 66 additions and 4 deletions
|
@ -5678,6 +5678,45 @@ class NamedTupleTests(BaseTestCase):
|
|||
with self.assertRaises(TypeError):
|
||||
class X(NamedTuple, A):
|
||||
x: int
|
||||
with self.assertRaises(TypeError):
|
||||
class X(NamedTuple, tuple):
|
||||
x: int
|
||||
with self.assertRaises(TypeError):
|
||||
class X(NamedTuple, NamedTuple):
|
||||
x: int
|
||||
class A(NamedTuple):
|
||||
x: int
|
||||
with self.assertRaises(TypeError):
|
||||
class X(NamedTuple, A):
|
||||
y: str
|
||||
|
||||
def test_generic(self):
|
||||
class X(NamedTuple, Generic[T]):
|
||||
x: T
|
||||
self.assertEqual(X.__bases__, (tuple, Generic))
|
||||
self.assertEqual(X.__orig_bases__, (NamedTuple, Generic[T]))
|
||||
self.assertEqual(X.__mro__, (X, tuple, Generic, object))
|
||||
|
||||
class Y(Generic[T], NamedTuple):
|
||||
x: T
|
||||
self.assertEqual(Y.__bases__, (Generic, tuple))
|
||||
self.assertEqual(Y.__orig_bases__, (Generic[T], NamedTuple))
|
||||
self.assertEqual(Y.__mro__, (Y, Generic, tuple, object))
|
||||
|
||||
for G in X, Y:
|
||||
with self.subTest(type=G):
|
||||
self.assertEqual(G.__parameters__, (T,))
|
||||
A = G[int]
|
||||
self.assertIs(A.__origin__, G)
|
||||
self.assertEqual(A.__args__, (int,))
|
||||
self.assertEqual(A.__parameters__, ())
|
||||
|
||||
a = A(3)
|
||||
self.assertIs(type(a), G)
|
||||
self.assertEqual(a.x, 3)
|
||||
|
||||
with self.assertRaises(TypeError):
|
||||
G[int, str]
|
||||
|
||||
def test_namedtuple_keyword_usage(self):
|
||||
LocalEmployee = NamedTuple("LocalEmployee", name=str, age=int)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue