Source code for allensdk.core.lazy_property.lazy_property

from typing import Callable, Iterable

[docs]class LazyProperty(object): def __init__(self, api_method: Callable, wrappers: Iterable = tuple(), settable: bool = False, *args, **kwargs): self.api_method = api_method self.wrappers = wrappers self.settable = settable 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): if self.settable: self.value = value else: raise AttributeError("Can't set a read-only attribute")
[docs] def calculate(self): result = self.api_method(*self.args, **self.kwargs) for wrapper in self.wrappers: result = wrapper(result) return result