Dictionary Enhancement?
John Hunter
jdhunter at ace.bsd.uchicago.edu
Thu Oct 31 10:06:23 EST 2002
>>>>> "Rich" == Rich Harkins <rich at worldsinfinite.com> writes:
Rich> I was wondering if anyone else had been wanting to enhance
Rich> Python dictionaries such that instead of raising KeyError in
Rich> the case of errors that another method on the dictionary
Rich> object, say __makeitem__ would be called to try to
Rich> auto-generate an appropriate value. That __makeitem__
Rich> method would then either raise KeyError itself or return the
Rich> value to insert into the dictionary and return through
Rich> __getitem__.
As of python 2.2, you can subclass built in types, so you are free to
enhance dict anyway you like.
Here is an example that uses makeitem to cube the argument, and raises
a KeyError if it can't
# requires python2.2
class mydict(dict):
def __makeitem__(self, key):
try: val = key**3
except: raise KeyError
else: return self.setdefault(key, val)
def __getitem__(self, key):
return self.get(key, self.__makeitem__(key))
m = mydict()
print m[2] # this is ok
m[3] = 10 # so is this
m['John'] = 33
#print m['Bill'] this raises a key error
print m
Is this what you are looking for?
John Hunter
More information about the Python-list
mailing list