18-08-2009 o 21:44:55 Pavel Panchekha <[email protected]> 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) <[email protected]>
--
http://mail.python.org/mailman/listinfo/python-list