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