Fix OrderedDict.setdefault() to work for subclasses that define __missing__().

This commit is contained in:
Raymond Hettinger 2010-12-31 23:16:17 +00:00
parent ed13853e5d
commit a673b1fd0e
3 changed files with 16 additions and 1 deletions

View file

@ -171,7 +171,6 @@ class OrderedDict(dict, MutableMapping):
size += sizeof(self.__root) * n # proxy objects
return size
setdefault = MutableMapping.setdefault
update = MutableMapping.update
pop = MutableMapping.pop
keys = MutableMapping.keys
@ -179,6 +178,13 @@ class OrderedDict(dict, MutableMapping):
items = MutableMapping.items
__ne__ = MutableMapping.__ne__
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
@_recursive_repr()
def __repr__(self):
'od.__repr__() <==> repr(od)'