Overriding dict constructor

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Mon Sep 20 07:11:51 EDT 2010


I have a dict subclass that associates extra data with each value of the 
key/value items:

class MyDict(dict):
    def __setitem__(self, key, value):
        super(MyDict, self).__setitem__(key, (value, "extra_data"))
    def __getitem__(self, key):
        return super(MyDict, self).__getitem__(key)[0]
    # plus extra methods


This works fine for item access, updates, etc:

>>> d = MyDict()
>>> d[0] = 'a'; d[1] = 'b'
>>> d[1]
'b'


But if I try to create a regular dict from this, dict() doesn't call my 
__getitem__ method:

>>> dict(d)
{0: ('a', 'extra_data'), 1: ('b', 'extra_data')}


instead of {0: 'a', 1: 'b'} as I expected.

How can I fix this?


-- 
Steven



More information about the Python-list mailing list