[pypy-commit] pypy py3k: make default_factory a property to match cpython

pjenvey noreply at buildbot.pypy.org
Sun Feb 24 00:55:56 CET 2013


Author: Philip Jenvey <pjenvey at underboss.org>
Branch: py3k
Changeset: r61718:91e89f67c327
Date: 2013-02-23 15:54 -0800
http://bitbucket.org/pypy/pypy/changeset/91e89f67c327/

Log:	make default_factory a property to match cpython

diff --git a/pypy/module/_collections/app_defaultdict.py b/pypy/module/_collections/app_defaultdict.py
--- a/pypy/module/_collections/app_defaultdict.py
+++ b/pypy/module/_collections/app_defaultdict.py
@@ -20,8 +20,16 @@
                 raise TypeError("first argument must be callable")
         else:
             default_factory = None
-        self.default_factory = default_factory
+        self._default_factory = default_factory
         super(defaultdict, self).__init__(*args, **kwds)
+
+    @property
+    def default_factory(self):
+        return self._default_factory
+
+    @default_factory.setter
+    def default_factory(self, default_factory):
+        self._default_factory = default_factory
  
     def __missing__(self, key):
         pass    # this method is written at interp-level
@@ -33,12 +41,12 @@
             return "defaultdict(...)"
         try:
             recurse.add(id(self))
-            return "defaultdict(%s, %s)" % (repr(self.default_factory), super(defaultdict, self).__repr__())
+            return "defaultdict(%s, %s)" % (repr(self._default_factory), super(defaultdict, self).__repr__())
         finally:
             recurse.remove(id(self))
 
     def copy(self):
-        return type(self)(self.default_factory, self)
+        return type(self)(self._default_factory, self)
     
     def __copy__(self):
         return self.copy()
@@ -55,4 +63,4 @@
 
            This API is used by pickle.py and copy.py.
         """
-        return (type(self), (self.default_factory,), None, None, self.iteritems())
+        return (type(self), (self._default_factory,), None, None, self.iteritems())
diff --git a/pypy/module/_collections/test/test_defaultdict.py b/pypy/module/_collections/test/test_defaultdict.py
--- a/pypy/module/_collections/test/test_defaultdict.py
+++ b/pypy/module/_collections/test/test_defaultdict.py
@@ -5,6 +5,8 @@
     def test_basics(self):
         from _collections import defaultdict
         d = defaultdict(list)
+        assert d.default_factory is list
+        assert defaultdict.default_factory.__get__(d) is list
         l = d[5]
         d[5].append(42)
         d[5].append(43)


More information about the pypy-commit mailing list