我写了一个python装饰器如下:
class Cache(object):
def __init__(self, func):
self.func = func
try:
from settings import REDIS_HOST
self.redis = redis.Redis(REDIS_HOST)
except:
self.redis = redis.Redis('localhost')
def __call__(self, *args, **kwargs):
print args
gen_key = kwargs.get('key', None)
if gen_key:
value = self.redis.get(gen_key)
if value:
return value
else:
value = self.func(*args, **kwargs)
self.redis.setex(value, gen_key, 1800)
return value
else:
raise UnsuportedArgsError
并按如下方式使用:
@Cache
def on_schedule_handle(data, bot, key):
...
def high_handle(test):
...
on_schedule_handle(data, bot, key)
...
发生了一件奇怪的事:
如果我直接调用on_schedule_handle,__call__
中的args是“data,bot,key”,没关系!
但如果我调用内部调用on_schedule_handle的high_handle,__call__
中的args是“test”!
我不知道。
谁能解释一下? THX ...