diff --git a/pytools/__init__.py b/pytools/__init__.py index af84b1bc55a0564ee31fe15795352516b0602335..bb3412a41007b6bca179fa47b8100cdc8f3658f8 100644 --- a/pytools/__init__.py +++ b/pytools/__init__.py @@ -375,50 +375,33 @@ def memoize(func, *args): FunctionValueCache = memoize -if sys.version_info >= (2, 5): - # For Python 2.5 and newer, support cache deletion by a - # 'method_name.clear_cache(self)' call. +def memoize_method(method): + """Supports cache deletion via ``method_name.clear_cache(self)``.""" - def memoize_method(method): - cache_dict_name = intern("_memoize_dic_"+method.__name__) + cache_dict_name = intern("_memoize_dic_"+method.__name__) - def wrapper(self, *args): - try: - return getattr(self, cache_dict_name)[args] - except AttributeError: - result = method(self, *args) - setattr(self, cache_dict_name, {args: result}) - return result - except KeyError: - result = method(self, *args) - getattr(self, cache_dict_name)[args] = result - return result - - def clear_cache(self): - delattr(self, cache_dict_name) + def wrapper(self, *args): + try: + return getattr(self, cache_dict_name)[args] + except AttributeError: + result = method(self, *args) + setattr(self, cache_dict_name, {args: result}) + return result + except KeyError: + result = method(self, *args) + getattr(self, cache_dict_name)[args] = result + return result + + def clear_cache(self): + delattr(self, cache_dict_name) + if sys.version_info >= (2, 5): from functools import update_wrapper new_wrapper = update_wrapper(wrapper, method) new_wrapper.clear_cache = clear_cache - return new_wrapper + return new_wrapper -else: - # For sad old Python 2.4, cache deletion is not supported. - - @my_decorator - def memoize_method(method, instance, *args): - cache_dict_name = intern("_memoize_dic_"+method.__name__) - try: - return getattr(instance, cache_dict_name)[args] - except AttributeError: - result = method(instance, *args) - setattr(instance, cache_dict_name, {args: result}) - return result - except KeyError: - result = method(instance, *args) - getattr(instance, cache_dict_name)[args] = result - return result def memoize_method_nested(inner):