baseimage-tutorial-framework/lib/tfw/decorators/lazy_initialise.py

20 lines
582 B
Python
Raw Normal View History

# Copyright (C) 2018 Avatao.com Innovative Learning Kft.
# All Rights Reserved. See LICENSE file for details.
class LazyInitialise:
"""
Decorator that replaces a function with the value
it calculates on the first call.
"""
def __init__(self, func):
self.func = func
self.__doc__ = func.__doc__
def __get__(self, instance, owner):
if instance is None:
raise TypeError('Cannot get object property from class!')
value = self.func(instance)
setattr(instance, self.func.__name__, value)
return value