mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
Issue #25665: Make NamedTuple picklable.
This commit is contained in:
parent
05e3090e3a
commit
557d1eb0f3
2 changed files with 13 additions and 0 deletions
|
@ -1163,6 +1163,14 @@ class NamedTupleTests(TestCase):
|
||||||
assert Emp._fields == ('name', 'id')
|
assert Emp._fields == ('name', 'id')
|
||||||
assert Emp._field_types == dict(name=str, id=int)
|
assert Emp._field_types == dict(name=str, id=int)
|
||||||
|
|
||||||
|
def test_pickle(self):
|
||||||
|
global Emp # pickle wants to reference the class by name
|
||||||
|
Emp = NamedTuple('Emp', [('name', str), ('id', int)])
|
||||||
|
jane = Emp('jane', 37)
|
||||||
|
z = pickle.dumps(jane)
|
||||||
|
jane2 = pickle.loads(z)
|
||||||
|
assert jane == jane2
|
||||||
|
|
||||||
|
|
||||||
class IOTests(TestCase):
|
class IOTests(TestCase):
|
||||||
|
|
||||||
|
|
|
@ -1479,6 +1479,11 @@ def NamedTuple(typename, fields):
|
||||||
fields = [(n, t) for n, t in fields]
|
fields = [(n, t) for n, t in fields]
|
||||||
cls = collections.namedtuple(typename, [n for n, t in fields])
|
cls = collections.namedtuple(typename, [n for n, t in fields])
|
||||||
cls._field_types = dict(fields)
|
cls._field_types = dict(fields)
|
||||||
|
# Set the module to the caller's module (otherwise it'd be 'typing').
|
||||||
|
try:
|
||||||
|
cls.__module__ = sys._getframe(1).f_globals.get('__name__', '__main__')
|
||||||
|
except (AttributeError, ValueError):
|
||||||
|
pass
|
||||||
return cls
|
return cls
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue