Author: Armin Rigo <[email protected]>
Branch:
Changeset: r76795:8374a14307bd
Date: 2015-04-15 12:26 +0200
http://bitbucket.org/pypy/pypy/changeset/8374a14307bd/
Log: 'default_factory' is actually a public read-write attribute on
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
@@ -11,7 +11,7 @@
class defaultdict(dict):
- __slots__ = ['__default_factory']
+ __slots__ = ['default_factory']
def __init__(self, *args, **kwds):
if len(args) > 0:
@@ -21,7 +21,7 @@
raise TypeError("first argument must be callable")
else:
default_factory = None
- defaultdict.__default_factory.__set__(self, default_factory)
+ defaultdict.default_factory.__set__(self, default_factory)
super(defaultdict, self).__init__(*args, **kwds)
def __missing__(self, key):
@@ -34,13 +34,13 @@
return "defaultdict(...)"
try:
recurse.add(id(self))
- return "defaultdict(%s, %s)" % (self.__default_factory,
+ return "defaultdict(%s, %s)" % (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)
__copy__ = copy
@@ -56,5 +56,5 @@
This API is used by pickle.py and copy.py.
"""
- return (type(self), (self.__default_factory,), None, None,
+ return (type(self), (self.default_factory,), None, None,
defaultdict.iteritems(self))
diff --git a/pypy/module/_collections/interp_defaultdict.py
b/pypy/module/_collections/interp_defaultdict.py
--- a/pypy/module/_collections/interp_defaultdict.py
+++ b/pypy/module/_collections/interp_defaultdict.py
@@ -4,8 +4,7 @@
# An interp-level version of this method. This is mostly only
# useful because it can be executed atomically in the presence of
# threads.
- w_default_factory = space.getattr(w_self,
- space.wrap('_defaultdict__default_factory'))
+ w_default_factory = space.getattr(w_self, space.wrap('default_factory'))
if space.is_w(w_default_factory, space.w_None):
raise OperationError(space.w_KeyError, space.newtuple([w_key]))
w_value = space.call_function(w_default_factory)
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
@@ -68,3 +68,11 @@
assert d['5'] == 0
d['6'] += 3
assert d['6'] == 3
+
+ def test_default_factory(self):
+ import _collections
+ f = lambda: 42
+ d = _collections.defaultdict(f)
+ assert d.default_factory is f
+ d.default_factory = lambda: 43
+ assert d['5'] == 43
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit