mirror of
https://github.com/python/cpython.git
synced 2025-12-04 00:30:19 +00:00
Fix named tuples to work with vars().
This commit is contained in:
parent
9028928156
commit
3d89057ff8
4 changed files with 7 additions and 1 deletions
|
|
@ -622,6 +622,8 @@ they add the ability to access fields by name instead of position index.
|
|||
def _asdict(self):
|
||||
'Return a new OrderedDict which maps field names to their values'
|
||||
return OrderedDict(zip(self._fields, self))
|
||||
<BLANKLINE>
|
||||
__dict__ = property(_asdict)
|
||||
<BLANKLINE>
|
||||
def _replace(_self, **kwds):
|
||||
'Return a new Point object replacing specified fields with new values'
|
||||
|
|
|
|||
|
|
@ -268,6 +268,8 @@ class {typename}(tuple):
|
|||
'Return a new OrderedDict which maps field names to their values'
|
||||
return OrderedDict(zip(self._fields, self))
|
||||
|
||||
__dict__ = property(_asdict)
|
||||
|
||||
def _replace(_self, **kwds):
|
||||
'Return a new {typename} object replacing specified fields with new values'
|
||||
result = _self._make(map(kwds.pop, {field_names!r}, _self))
|
||||
|
|
|
|||
|
|
@ -180,12 +180,12 @@ class TestNamedTuple(unittest.TestCase):
|
|||
self.assertRaises(TypeError, eval, 'Point(XXX=1, y=2)', locals()) # wrong keyword argument
|
||||
self.assertRaises(TypeError, eval, 'Point(x=1)', locals()) # missing keyword argument
|
||||
self.assertEqual(repr(p), 'Point(x=11, y=22)')
|
||||
self.assertNotIn('__dict__', dir(p)) # verify instance has no dict
|
||||
self.assertNotIn('__weakref__', dir(p))
|
||||
self.assertEqual(p, Point._make([11, 22])) # test _make classmethod
|
||||
self.assertEqual(p._fields, ('x', 'y')) # test _fields attribute
|
||||
self.assertEqual(p._replace(x=1), (1, 22)) # test _replace method
|
||||
self.assertEqual(p._asdict(), dict(x=11, y=22)) # test _asdict method
|
||||
self.assertEqual(vars(p), p._asdict()) # verify that vars() works
|
||||
|
||||
try:
|
||||
p._replace(x=1, error=2)
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Named tuples now work correctly with vars().
|
||||
|
||||
- Issue #12085: Fix an attribute error in subprocess.Popen destructor if the
|
||||
constructor has failed, e.g. because of an undeclared keyword argument. Patch
|
||||
written by Oleg Oshmyan.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue