class_docstr: Non-data descriptor caching the computed result as instance attribute.
  
  >>> import itertools
  >>> class Spam(object):
  ...     @lazyproperty
  ...     def eggs(self, _ints=itertools.count()):
  ...         return next(_ints)
  
  >>> spam = Spam(); (spam.eggs, spam.eggs)
  (0, 0)
  >>> spam.eggs = 'eggs'; str(spam.eggs)
  'eggs'
  >>> del spam.eggs; (spam.eggs, spam.eggs)
  (1, 1)
  >>> Spam().eggs
  2
  >>> Spam.eggs  # doctest: +ELLIPSIS
  <...lazyproperty object at 0x...>
code: def __init__(self, fget):
      self.fget = fget
      for attr in ("__module__", "__name__", "__doc__"):
          setattr(self, attr, getattr(fget, attr))
  
file_path: h2o-3/h2o-py/h2o/utils/csv/_common.py
imports: import codecs
  import locale
label_desc: Use image node_id 1 to create a new lazyproperty object from inherited base classes: object with example: obj = lazyproperty(fget)