Exemplo n.º 1
0
    def __init__(self, fn):
        self._callable = fn
        self.in_call = False

    def __call__(self, *args, **kwds):
        if self.in_call:
            raise RuntimeError('Identified recursion!')
        self.in_call = True
        try:
            result = self._callable(*args, **kwds)
        finally:
            self.in_call = False
        return result

protect_against_recursion = simple_decorator(ProtectAgainstRecursion)



class Memoize(object):

    def __init__(self,function):
        self._callable = function
        self.set_cache_enabled(True)
        self.logging_level = None

    def set_cache_enabled(self, value):
        self._cache_enabled = value

    def has_cached_value(self):
        try:
Exemplo n.º 2
0
logging.basicConfig(level=logging.INFO)


class Memoize(object):

    def __init__(self,function):
        self._callable = function

    def __call__(self):
        try:
            return self.cached_value
        except AttributeError:
            self.cached_value = self._callable()
            return self.cached_value

memoize = simple_decorator(Memoize)



class Klass(object):

    def __init__(self):
        self._calculate_value = memoize(self._calculate_value)

    def _calculate_value(self):
        logging.info('id=%d: Calculating value', id(self))
        return 5 * 3

    def _get_value(self):
        return self._calculate_value()