def name(self):
return __class__.__name__
+ def test_named_tuple_non_sequence_input(self):
+ field_names = ["x", "y"]
+ field_values = [int, int]
+ Point = NamedTuple("Point", zip(field_names, field_values))
+ p = Point(1, 2)
+ self.assertEqual(p.x, 1)
+ self.assertEqual(p.y, 2)
+ self.assertEqual(repr(p),"Point(x=1, y=2)")
+
class TypedDictTests(BaseTestCase):
def test_basics_functional_syntax(self):
"""
types = {n: _type_check(t, f"field {n} annotation must be a type")
for n, t in fields}
- field_names = [n for n, _ in fields]
- nt = _make_nmtuple(typename, field_names, _make_eager_annotate(types), module=_caller())
+ nt = _make_nmtuple(typename, types, _make_eager_annotate(types), module=_caller())
nt.__orig_bases__ = (NamedTuple,)
return nt
--- /dev/null
+The functional syntax for creating :class:`typing.NamedTuple`
+classes now supports passing any :term:`iterable` of fields and types.
+Previously, only sequences were supported.