Source code for allensdk.core.lazy_property.lazy_property
[docs]class LazyProperty(object):
def __init__(self, api_method, wrappers=tuple(), *args, **kwargs):
self.api_method = api_method
self.wrappers = wrappers
self.args = args
self.kwargs = kwargs
self.value = None
def __get__(self, obj, objtype=None):
if obj is None:
return self
if self.value is None:
self.value = self.calculate()
return self.value
def __set__(self, obj, value):
raise AttributeError("Can't set LazyLoadable attribute")
[docs] def calculate(self):
result = self.api_method(*self.args, **self.kwargs)
for wrapper in self.wrappers:
result = wrapper(result)
return result