class_docstr: Decorator that marks that an attribute of an instance should not be
  computed until needed, and that the value should be memoized.
  
  Example
  -------
  
  >>> from catalyst.utils.memoize import lazyval
  >>> class C(object):
  ...     def __init__(self):
  ...         self.count = 0
  ...     @lazyval
  ...     def val(self):
  ...         self.count += 1
  ...         return "val"
  ...
  >>> c = C()
  >>> c.count
  0
  >>> c.val, c.count
  ('val', 1)
  >>> c.val, c.count
  ('val', 1)
  >>> c.val = 'not_val'
  Traceback (most recent call last):
  ...
  AttributeError: Can't set read-only attribute.
  >>> c.val
  'val'
code: def __init__(self, get):
      self._get = get
      self._cache = WeakKeyDictionary()
  
imports: from collections import OrderedDict, Sequence
  from functools import wraps
  from itertools import compress
  from weakref import WeakKeyDictionary, ref
  from six.moves._thread import allocate_lock
  from toolz.sandbox import unzip
label_desc: Use image node_id 1 to create a new lazyval object from inherited base classes: object with example: obj = lazyval(get)