Fix named tuples to work with vars().
This commit is contained in:
parent
19b851d11b
commit
45b082935d
|
@ -623,7 +623,9 @@ Example:
|
||||||
'Return a new OrderedDict which maps field names to their values'
|
'Return a new OrderedDict which maps field names to their values'
|
||||||
return OrderedDict(zip(self._fields, self))
|
return OrderedDict(zip(self._fields, self))
|
||||||
<BLANKLINE>
|
<BLANKLINE>
|
||||||
def _replace(_self, **kwds):
|
__dict__ = property(_asdict)
|
||||||
|
<BLANKLINE>
|
||||||
|
def _replace(_self, **kwds):
|
||||||
'Return a new Point object replacing specified fields with new values'
|
'Return a new Point object replacing specified fields with new values'
|
||||||
result = _self._make(map(kwds.pop, ('x', 'y'), _self))
|
result = _self._make(map(kwds.pop, ('x', 'y'), _self))
|
||||||
if kwds:
|
if kwds:
|
||||||
|
|
|
@ -312,6 +312,7 @@ def namedtuple(typename, field_names, verbose=False, rename=False):
|
||||||
def _asdict(self):
|
def _asdict(self):
|
||||||
'Return a new OrderedDict which maps field names to their values'
|
'Return a new OrderedDict which maps field names to their values'
|
||||||
return OrderedDict(zip(self._fields, self)) \n
|
return OrderedDict(zip(self._fields, self)) \n
|
||||||
|
__dict__ = property(_asdict) \n
|
||||||
def _replace(_self, **kwds):
|
def _replace(_self, **kwds):
|
||||||
'Return a new %(typename)s object replacing specified fields with new values'
|
'Return a new %(typename)s object replacing specified fields with new values'
|
||||||
result = _self._make(map(kwds.pop, %(field_names)r, _self))
|
result = _self._make(map(kwds.pop, %(field_names)r, _self))
|
||||||
|
|
|
@ -78,12 +78,12 @@ class TestNamedTuple(unittest.TestCase):
|
||||||
self.assertRaises(TypeError, eval, 'Point(XXX=1, y=2)', locals()) # wrong keyword argument
|
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.assertRaises(TypeError, eval, 'Point(x=1)', locals()) # missing keyword argument
|
||||||
self.assertEqual(repr(p), 'Point(x=11, y=22)')
|
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.assertNotIn('__weakref__', dir(p))
|
||||||
self.assertEqual(p, Point._make([11, 22])) # test _make classmethod
|
self.assertEqual(p, Point._make([11, 22])) # test _make classmethod
|
||||||
self.assertEqual(p._fields, ('x', 'y')) # test _fields attribute
|
self.assertEqual(p._fields, ('x', 'y')) # test _fields attribute
|
||||||
self.assertEqual(p._replace(x=1), (1, 22)) # test _replace method
|
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(p._asdict(), dict(x=11, y=22)) # test _asdict method
|
||||||
|
self.assertEqual(vars(p), p._asdict()) # verify that vars() works
|
||||||
|
|
||||||
try:
|
try:
|
||||||
p._replace(x=1, error=2)
|
p._replace(x=1, error=2)
|
||||||
|
|
|
@ -16,6 +16,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Named tuples now work correctly with vars().
|
||||||
|
|
||||||
- sys.setcheckinterval() now updates the current ticker count as well as updating
|
- sys.setcheckinterval() now updates the current ticker count as well as updating
|
||||||
the check interval, so if the user decreases the check interval, the ticker
|
the check interval, so if the user decreases the check interval, the ticker
|
||||||
doesn't have to wind down to zero from the old starting point before the new
|
doesn't have to wind down to zero from the old starting point before the new
|
||||||
|
|
Loading…
Reference in New Issue