Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #64374
| From | Peter Otten <__peter__@web.de> |
|---|---|
| Subject | Re: 1st Sketch at at ReadOnly dict |
| Date | 2014-01-20 21:52 +0100 |
| Organization | None |
| References | <52DD8297.9050504@earthlink.net> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.5758.1390251160.18130.python-list@python.org> (permalink) |
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.
Back to comp.lang.python | Previous | Next | Find similar | Unroll thread
Re: 1st Sketch at at ReadOnly dict Peter Otten <__peter__@web.de> - 2014-01-20 21:52 +0100
csiph-web