Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #64374 > unrolled thread

Re: 1st Sketch at at ReadOnly dict

Started byPeter Otten <__peter__@web.de>
First post2014-01-20 21:52 +0100
Last post2014-01-20 21:52 +0100
Articles 1 — 1 participant

Back to article view | Back to comp.lang.python

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: 1st Sketch at at ReadOnly dict Peter Otten <__peter__@web.de> - 2014-01-20 21:52 +0100

#64374 — Re: 1st Sketch at at ReadOnly dict

FromPeter Otten <__peter__@web.de>
Date2014-01-20 21:52 +0100
SubjectRe: 1st Sketch at at ReadOnly dict
Message-ID<mailman.5758.1390251160.18130.python-list@python.org>
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.

[toc] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web