Advertisement
Guest User

Read-only dict

a guest
Oct 7th, 2015
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.34 KB | None | 0 0
  1. from collections import Mapping
  2.  
  3. class FrozenDict(Mapping):
  4.     """A dictionary that does not support item assignment after initialization
  5.    >>> fd = FrozenDict(a=1, b=2)
  6.    >>> fd["a"]
  7.    1
  8.    >>> fd["a"] = 777  # doctest: +IGNORE_EXCEPTION_DETAIL
  9.    Traceback (most recent call last):
  10.    ...
  11.    TypeError: 'FrozenDict' object does not support item assignment
  12.    >>> sorted(fd.items())
  13.    [('a', 1), ('b', 2)]
  14.    >>> fd.keys()
  15.    ['a', 'b']
  16.    >>> fd
  17.    FrozenDict('a'=1, 'b'=2)
  18.    """
  19.     def __init__(self, **kwargs):
  20.         self.__kwargs = kwargs
  21.         self.__init__ = None
  22.         self.__next__ = self.next
  23.         self.__counter = 0
  24.     def __repr__(self):
  25.         kwargs = ["%r=%r" % (k, v) for k, v in sorted(self.__kwargs.items())]
  26.         return "%s(%s)" % (self.__class__.__name__, ", ".join(kwargs))
  27.     def __getitem__(self, key):
  28.         return self.__kwargs[key]
  29.     def __iter__(self):
  30.         return self
  31.     def next(self):
  32.         try:
  33.             value = self.__kwargs.items()[self.__counter][0]
  34.         except IndexError:
  35.             raise StopIteration
  36.         self.__counter += 1
  37.         return value
  38.     def __len__(self):
  39.         return len(self.__kwargs)
  40.  
  41. class ChillyDict(dict):
  42.     """A dictionary that does not support item assignment after initialization
  43.    >>> cd = ChillyDict(a=1, b=2)
  44.    >>> cd["a"]
  45.    1
  46.    >>> cd["a"] = 777  # doctest: +IGNORE_EXCEPTION_DETAIL
  47.    Traceback (most recent call last):
  48.    ...
  49.    NotImplementedError: 'ChillyDict' object does not support item assignment
  50.    >>> sorted(cd.items())
  51.    [('a', 1), ('b', 2)]
  52.    >>> cd.keys()
  53.    ['a', 'b']
  54.    >>> cd
  55.    ChillyDict('a'=1, 'b'=2)
  56.    """
  57.     def __init__(self, **kwargs):
  58.         self.__kwargs = kwargs
  59.         super(ChillyDict, self).__init__(**self.__kwargs)
  60.         self.__init__ = None
  61.     def __repr__(self):
  62.         kwargs = ["%r=%r" % (k, v) for k, v in sorted(self.__kwargs.items())]
  63.         return "%s(%s)" % (self.__class__.__name__, ", ".join(kwargs))
  64.     def __not_implemented(self, *args, **kwargs):
  65.         msg = "'%s' object does not support item assignment"
  66.         raise NotImplementedError, msg % self.__class__.__name__
  67.     __setitem__ = __delitem__ = update = pop = popitem = clear = __not_implemented
  68.  
  69. if __name__ == "__main__":
  70.     import doctest
  71.     doctest.testmod()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement