Python:装饰器参数传递问题

时间:2013-01-14 17:46:05

标签: python

我写了一个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 ...

0 个答案:

没有答案