Inheriting dictionary
Jan Kaliszewski
zuo at chopin.edu.pl
Tue Aug 18 16:23:09 EDT 2009
18-08-2009 o 21:44:55 Pavel Panchekha <pavpanchekha at 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) <zuo at chopin.edu.pl>
More information about the Python-list
mailing list