Commit 32062e9b authored by Raymond Hettinger's avatar Raymond Hettinger

Make it easier to extend OrderedDict without breaking it.

parent 60db4675
......@@ -52,7 +52,7 @@ class OrderedDict(dict, MutableMapping):
self.__root = root = _proxy(self.__hardroot)
root.prev = root.next = root
self.__map = {}
self.update(*args, **kwds)
self.__update(*args, **kwds)
def __setitem__(self, key, value,
dict_setitem=dict.__setitem__, proxy=_proxy, Link=_Link):
......@@ -171,7 +171,7 @@ class OrderedDict(dict, MutableMapping):
size += sizeof(self.__root) * n # proxy objects
return size
update = MutableMapping.update
update = __update = MutableMapping.update
pop = MutableMapping.pop
keys = MutableMapping.keys
values = MutableMapping.values
......
......@@ -1012,6 +1012,14 @@ class TestOrderedDict(unittest.TestCase):
od = OrderedDict(**d)
self.assertGreater(sys.getsizeof(od), sys.getsizeof(d))
def test_override_update(self):
# Verify that subclasses can override update() without breaking __init__()
class MyOD(OrderedDict):
def update(self, *args, **kwds):
raise Exception()
items = [('a', 1), ('c', 3), ('b', 2)]
self.assertEqual(list(MyOD(items).items()), items)
class GeneralMappingTests(mapping_tests.BasicTestMappingProtocol):
type2test = OrderedDict
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment