这种方法下要缓存的函数只能写作类函数,因为需要继承cacheable类。不知是否有什么改进方法?
from datetime import datetime
def cached(time):
def make_cacheable(func):
func.should_be_cached = True
func.time_out = time
return func
return make_cacheable
class Cacheable(object):
__CACHE__ = {}
def cache_that(self, func):
def wrapper(*args, **kw):
name = "%s%r%r" % (func.__name__, args, kw)
if name not in self.__CACHE__ or ( datetime.today() - self.__CACHE__["time"] ).total_seconds() > func.time_out:
self.__CACHE__[name] = func(*args, **kw)
self.__CACHE__["time"] = datetime.today()
return self.__CACHE__[name]
wrapper.__name__ = func.__name__
return wrapper
#内置函数。类中的函数每次被调用时,都是先通过该函数找到函数名对应的函数,再执行
def __getattribute__(self, attr):
function