[Python-checkins] cpython: Deprecate nametuple._asdict()

raymond.hettinger python-checkins at python.org
Sat May 18 02:14:43 CEST 2013


http://hg.python.org/cpython/rev/c4ca39bece9d
changeset:   83822:c4ca39bece9d
user:        Raymond Hettinger <python at rcn.com>
date:        Fri May 17 17:14:27 2013 -0700
summary:
  Deprecate nametuple._asdict()

files:
  Doc/library/collections.rst  |  7 +++++--
  Lib/collections/__init__.py  |  3 +++
  Lib/test/test_collections.py |  7 +++++--
  Misc/NEWS                    |  3 +++
  4 files changed, 16 insertions(+), 4 deletions(-)


diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst
--- a/Doc/library/collections.rst
+++ b/Doc/library/collections.rst
@@ -829,6 +829,9 @@
     .. versionchanged:: 3.1
         Returns an :class:`OrderedDict` instead of a regular :class:`dict`.
 
+    .. deprecated:: 3.4
+       Use ``vars(nt)`` or ``nt.__dict__`` instead.
+
 .. method:: somenamedtuple._replace(kwargs)
 
     Return a new instance of the named tuple replacing specified fields with new
@@ -845,8 +848,8 @@
 
     A string with the pure Python source code used to create the named
     tuple class.  The source makes the named tuple self-documenting.
-    It can be printed, executed using :func:`exec`, or saved to a file
-    and imported.
+    It can be printed, executed using :func:`exec`, customized, or saved
+    to a file and imported.
 
     .. versionadded:: 3.3
 
diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py
--- a/Lib/collections/__init__.py
+++ b/Lib/collections/__init__.py
@@ -280,6 +280,9 @@
         '''Return a new OrderedDict which maps field names to their values.
            This method is obsolete.  Use vars(nt) or nt.__dict__ instead.
         '''
+        import warnings
+        warnings.warn('_asdict() is deprecated.  Use vars(nt) instead.',
+                      DeprecationWarning, stacklevel=2)
         return self.__dict__
 
     def __getnewargs__(self):
diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py
--- a/Lib/test/test_collections.py
+++ b/Lib/test/test_collections.py
@@ -217,8 +217,11 @@
         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
+        self.assertEqual(p.__dict__,
+                         OrderedDict([('x', 11), ('y', 22)]))               # test __dict__ attribute
+        self.assertEqual(vars(p), p.__dict__)                               # verify that vars() works
+        with self.assertWarns(DeprecationWarning):                          # check deprecate of _asdict
+            p._asdict()
 
         try:
             p._replace(x=1, error=2)
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -96,6 +96,9 @@
 
 - Issue #15758: Fix FileIO.readall() so it no longer has O(n**2) complexity.
 
+- Deprecated the _asdict() method on named tuples.  Use __dict__ or vars(nt)
+  instead.
+
 - Issue #14596: The struct.Struct() objects now use more compact implementation.
 
 - Issue #17981: Closed socket on error in SysLogHandler.

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list