我想缓存某个类的某些方法 - 但前提是在类的实例上设置了read_only
标志。
因此,在下面的对象中,我希望get()
方法可以缓存,但前提是self.readonly
为True。
我无法有条件地使用装饰器,因为它是在定义类时设置的,而不是在实例化时设置的。
from beaker.cache import cache_regions, cache_region
cache_regions.update({
'long_term':{
'expire':86400,
'type':'dbm',
'data_dir':'/tmp',
'key_length': 32,
}
})
class Foo(object):
def __init__(self, read_only=True):
self.read_only = read_only
@cache_region('long_term')
def get(self, arg):
return arg + 1
答案 0 :(得分:3)
您可以使用装饰器调用右侧(缓存或非缓存)函数来检查所需的属性:
def conditional(decorator):
def conditional_decorator(fn):
dec = decorator(fn)
def wrapper(self, *args, **kw):
if self.read_only:
return dec(self, *args, **kw)
return fn(self, *args, **kw)
return wrapper
return conditional_decorator
像这样使用:
@conditional(cache_region('long_term'))
def get(self, arg):
return arg + 1