Charles Hixson wrote: > This is just a first sketch, and I haven't yet attempted to test it, so > what I'm hoping for is criticisms on the general approach. > > class RODict:
> def __init__ (self, ddict = {}): Default values are evaluted just once when the method is created. Mutable default values mean trouble: >>> class D: ... def __init__(self, dict={}): ... self.dict = dict ... def __setitem__(self, key, value): ... self.dict[key] = value ... def __repr__(self): return repr(self.dict) ... >>> d1 = D() >>> d2 = D() >>> d1[1] = 42 >>> d2[2] = 42 >>> d1 {1: 42, 2: 42} >>> d2 {1: 42, 2: 42} > if not isinstance(ddict, dict): > raise TypeError("ddict must be a dict. It is " + > repr(ddict)) > self._ddict = ddict I think instead of the type check I would build a new dict from the argument. The usual initializers dict({1:2, 3:4}) dict([(1,2), (3,4)]) dict(a=1, b=2) should work with your read-only dict. > > ## Test for containment. > # @param key The item to be found. > # @return True If key is in the instance, otherwise False. Docstrings are usually prefered over comments like the above. > def __contains__(self, key): > return key in self._ddict Did you know http://docs.python.org/dev/library/collections.abc.html#collections.abc.Mapping Subclass from it to ensure that all the usuall methods are defined. -- https://mail.python.org/mailman/listinfo/python-list