lazy.py
28 lines
| 760 B
| text/x-python
|
PythonLexer
r2007 | class LazyProperty(object): | |||
""" | ||||
Decorator for easier creation of ``property`` from potentially expensive to | ||||
calculate attribute of the class. | ||||
Usage:: | ||||
class Foo(object): | ||||
@LazyProperty | ||||
def bar(self): | ||||
print 'Calculating self._bar' | ||||
return 42 | ||||
Taken from http://blog.pythonisito.com/2008/08/lazy-descriptors.html and | ||||
used widely. | ||||
""" | ||||
def __init__(self, func): | ||||
self._func = func | ||||
r2494 | self.__module__ = func.__module__ | |||
r2007 | self.__name__ = func.__name__ | |||
self.__doc__ = func.__doc__ | ||||
def __get__(self, obj, klass=None): | ||||
if obj is None: | ||||
r2494 | return self | |||
r2007 | result = obj.__dict__[self.__name__] = self._func(obj) | |||
return result | ||||