@@ -0,0 +1,859 @@
+class cached_property:%0A%0A    %22%22%22Similar to @property but caches value on first access.%0A%0A    When the property is first accessed, its value is computed and set%0A    as an instance attribute (i.e., in the instance's %60%60__dict__%60%60).%0A    Subsequent accesses will get the value directly from the instance's%0A    %60%60__dict__%60%60 (i.e., this descriptor will not be invoked).%0A%0A    The property can be set and deleted as usual. When the property is%0A    deleted, its value will be recomputed and re-set on the next access.%0A%0A    %22%22%22%0A%0A    def __init__(self, fget):%0A        self.fget = fget%0A        self.__name__ = fget.__name__%0A        self.__doc__ = fget.__doc__%0A%0A    def __get__(self, obj, cls=None):%0A        if obj is None:  # property accessed via class%0A            return self%0A        obj.__dict__%5Bself.__name__%5D = self.fget(obj)%0A        return obj.__dict__%5Bself.__name__%5D%0A

Add cached_property decorator