Raymond-Hettingers-MacBook-Pro:py27 raymondhettinger$ cat svn-commit.tmp
Backport r87594 r87611 and r87612 so that OrderedDict subclassing behavior
better matches dict subclassing (i.e. adding __missing__ works and
extending/overriding the update() methods doesn't break __init__()).
diff --git a/Lib/collections.py b/Lib/collections.py
index a49ecc7..17fc012 100644
--- a/Lib/collections.py
+++ b/Lib/collections.py
@@ -43,7 +43,7 @@
### OrderedDict
################################################################################
-class OrderedDict(dict, MutableMapping):
+class OrderedDict(dict):
'Dictionary that remembers insertion order'
# An inherited dict maps keys to values.
# The inherited dict provides __getitem__, __len__, __contains__, and get.
@@ -71,7 +71,7 @@
NEXT = 1
root[PREV] = root[NEXT] = root
self.__map = {}
- self.update(*args, **kwds)
+ self.__update(*args, **kwds)
def __setitem__(self, key, value, PREV=0, NEXT=1, dict_setitem=dict.__setitem__):
'od.__setitem__(i, y) <==> od[i]=y'
@@ -134,9 +134,7 @@
pass
dict.clear(self)
- setdefault = MutableMapping.setdefault
- update = MutableMapping.update
- pop = MutableMapping.pop
+ update = __update = MutableMapping.update
keys = MutableMapping.keys
values = MutableMapping.values
items = MutableMapping.items
@@ -157,6 +155,24 @@
"od.viewitems() -> a set-like object providing a view on od's items"
return ItemsView(self)
+ __marker = object()
+
+ def pop(self, key, default=__marker):
+ if key in self:
+ result = self[key]
+ del self[key]
+ return result
+ if default is self.__marker:
+ raise KeyError(key)
+ return default
+
+ def setdefault(self, key, default=None):
+ 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od'
+ if key in self:
+ return self[key]
+ self[key] = default
+ return default
+
def popitem(self, last=True):
'''od.popitem() -> (k, v), return and remove a (key, value) pair.
Pairs are returned in LIFO order if last is true or FIFO order if false.