[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