X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Futil%2Fdefaultdict.py;h=513eb81f11ccfd997bb7c4e45716a652ddbafaf8;hb=052e281f8c79237b6759cbb259407f071adda1cc;hp=e0dd14503f0eb872fb5751173b3fac503a9aefbd;hpb=07fcf3cbd55e243bed442271a7557178a92559bf;p=sfa.git diff --git a/sfa/util/defaultdict.py b/sfa/util/defaultdict.py index e0dd1450..513eb81f 100644 --- a/sfa/util/defaultdict.py +++ b/sfa/util/defaultdict.py @@ -3,36 +3,44 @@ try: from collections import defaultdict except: class defaultdict(dict): + def __init__(self, default_factory=None, *a, **kw): if (default_factory is not None and - not hasattr(default_factory, '__call__')): + not hasattr(default_factory, '__call__')): raise TypeError('first argument must be callable') dict.__init__(self, *a, **kw) self.default_factory = default_factory + def __getitem__(self, key): try: return dict.__getitem__(self, key) except KeyError: return self.__missing__(key) + def __missing__(self, key): if self.default_factory is None: raise KeyError(key) self[key] = value = self.default_factory() return value + def __reduce__(self): if self.default_factory is None: args = tuple() else: args = self.default_factory, return type(self), args, None, None, self.items() + def copy(self): return self.__copy__() + def __copy__(self): return type(self)(self.default_factory, self) + def __deepcopy__(self, memo): import copy return type(self)(self.default_factory, copy.deepcopy(self.items())) + def __repr__(self): return 'defaultdict(%s, %s)' % (self.default_factory, dict.__repr__(self))