18-08-2009 o 21:44:55 Pavel Panchekha <pavpanche...@gmail.com> wrote:

I want a dictionary that will transparently "inherit" from a parent
dictionary. So, for example:

"""
a = InheritDict({1: "one", 2: "two", 4: "four"})
b = InheritDict({3: "three", 4: "foobar"}, inherit_from=a)

a[1] # "one"
a[4] # "four"
b[1] # "one"
b[3] # "three"
b[4] # "foobar"
"""

I've written something like this in Python already, but I'm wondering
if something like this already exists, preferably written in C, for
speed.

AFAIN -- no. But you can easily implement it in Python with rather
small loss of speed...


 class InheritDict(dict):

     class NoParent(object):
         def __getitem__(self, key):
             raise KeyError('There is no %r key in the hierarchy' % key)
         def __nonzero__(self):
             return False

     noparent = NoParent()

     def __init__(self, *args, **kwargs):
         parent = kwargs.pop('inherit_from', self.noparent)
         dict.__init__(self, *args, **kwargs)
         self.parent = parent

     def __getitem__(self, key):
         try:
             return dict.__getitem__(self, key)
         except KeyError:
             return self.parent[key]


Did you do it in similar way? (just curiosity) :-)

Regards,
*j

--
Jan Kaliszewski (zuo) <z...@chopin.edu.pl>
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to