diff options
-rw-r--r-- | ranger/ext/lazy_property.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/ranger/ext/lazy_property.py b/ranger/ext/lazy_property.py new file mode 100644 index 00000000..6f894179 --- /dev/null +++ b/ranger/ext/lazy_property.py @@ -0,0 +1,25 @@ +# From http://blog.pythonisito.com/2008/08/lazy-descriptors.html + +class lazy_property(object): + """ + A @property-like decorator with lazy evaluation + + Example: + class Foo: + @lazy_property + def bar(self): + result = [...] + return result + """ + + def __init__(self, method): + self._method = method + self.__name__ = method.__name__ + self.__doc__ = method.__doc__ + + def __get__(self, obj, cls=None): + if obj is None: # to fix issues with pydoc + return None + result = self._method(obj) + obj.__dict__[self.__name__] = result + return result |