Source code for wheezy.core.descriptors
""" ``descriptors`` module.
"""
class attribute(object):
[docs] """ ``attribute`` decorator is intended to promote a
function call to object attribute. This means the
function is called once and replaced with
returned value.
>>> class A:
... def __init__(self):
... self.counter = 0
... @attribute
... def count(self):
... self.counter += 1
... return self.counter
>>> a = A()
>>> a.count
1
>>> a.count
1
"""
__slots__ = ('f')
def __init__(self, f):
self.f = f
def __get__(self, obj, t=None):
f = self.f
val = f(obj)
setattr(obj, f.__name__, val)
return val