def _loadable_get_(name, self):
        "Used to lazily-evaluate & memoize an attribute."

        func = getattr(self._attr_func_, name)
        ret = func()
        setattr(self._attr_data_, name, ret)
        setattr(
            type(self),
            name,
            property(
                functools.partial(self._simple_get_, name)
            )
        )
        delattr(self._attr_func_, name)
        return ret
Used to lazily-evaluate & memoize an attribute.