class_docstr: A property that is only computed once per instance and then replaces itself
  with an ordinary attribute. Deleting the attribute resets the property.
  
  Based on https://github.com/pydanny/cached-property/blob/master/cached_property.py
class_docstr_tok: ["A","property","that","is","only","computed","once","per","instance","and","then","replaces","itself","with","an","ordinary","attribute",".","Deleting","the","attribute","resets","the","property",".","Based","on","https",":","\/\/github.com\/pydanny\/cached-property\/blob\/master\/cached_property.py"]
code: def cached_property_wrapper(self, obj, _cls):
      if obj is None:
          return self
  
      value = obj.__dict__[self.func.__name__] = self.func(obj)
      return value
  
imports: import ast
  import itertools
  import types
  from collections import OrderedDict, Counter, defaultdict
  from types import FrameType, TracebackType
  from typing import Iterator, List, Tuple, Iterable, Callable, Union, TypeVar, Mapping
  from asttokens import ASTText
label_desc: Use image node_id 2 for calling the cached_property obj's underlying member method code with example usage: obj.cached_property_wrapper(obj, _cls) and returns: value, self