装饰者可以访问原始功能

时间:2012-12-21 01:24:38

标签: python decorator

我定义了以下装饰器:

def loop_callback(func):
    """Only works in programs with a single main loop. Can call .sameThread
    to access the original unwrapped function directly"""
    @wraps(func)
    def wrapped_func(*args, **varargs):
        if mainThread==threading.current_thread():
            print("We are in the loop thread")
            func(*args, **varargs)
        else:
            print("In another thread")
            loop.add_callback(lambda: func(*args, **varargs))
    wrapped_func.orig=func
    return wrapped_func

我们的想法是,您应该可以通过调用类似myObject.myFunction.orig(arg1, arg2)的内容来访问原始函数。很遗憾,orig不会收到自我对象,只有arg1arg2。有没有办法解决这个问题,以便可以按我想要的方式调用它?

1 个答案:

答案 0 :(得分:0)

你或许可以弄清楚如何将它装入像这样的装饰器中,这样你实际上最终会得到你想要的场景中所需的绑定方法,但实际上,这可能是一个很好的机会。您要了解descriptor protocol