X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Futil%2Fdefaultdict.py;h=8ef4d8ef6ab6c1cddc6012b900278fd931d62596;hb=4a9e6751f9f396f463932133b9d62fc925a99ef6;hp=e0dd14503f0eb872fb5751173b3fac503a9aefbd;hpb=44dbc99733c218930dc61619c068f1038c4f33e4;p=sfa.git diff --git a/sfa/util/defaultdict.py b/sfa/util/defaultdict.py index e0dd1450..8ef4d8ef 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() + return type(self), args, None, None, list(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())) + copy.deepcopy(list(self.items()))) + def __repr__(self): return 'defaultdict(%s, %s)' % (self.default_factory, dict.__repr__(self))