git.fiddlerwoaroof.com
lazy_attributes.py
c166d750
 class LazyLoad(object):
     def __init__(self, __func_, *args, **kwargs):
         self.__func = __func_
         self.__args = list(args)
         self.__kwargs = kwargs
     def __get__(self, inst, cls):
         tb = cls.__dict__
         nm = [x for x in tb.keys() if id(tb[x]) == id(self)][0]
         setattr(inst, nm, self.__func(*self.__args, **self.__kwargs))
         return getattr(inst, nm)
 
 def func(a,b,c):
     print a,b,c
     return a+b,c
 
 class a(object):
     b = LazyLoad(func, 1,2,3)
     c = LazyLoad(func, 2,3,4)
     d = LazyLoad(func, 3,4,5)
     __e = LazyLoad(func, 4,5,6)
     def __str__(self): return str(self.__e)