接受参数的类装饰器

时间:2019-12-09 02:22:26

标签: python-2.7 python-decorators

我一直试图了解此类装饰器:

class MyClassDecorator:
    def __init__(self, *a, **kw):
        self.conf_args = a
        self.conf_kw = kw

    def __call__(self, func):
        def wrapper(*args, **kwargs): 
            return func(*args, **kwargs)
        return wrapper

@MyClassDecorator('arg1')
def mysum(x,y):
    return x+y

装饰后,mysum通过以下方式成为MyDecoratorClass的对象:

mysum = MyDecorator('arg1')(mysum)

然后它如何接受参数,因为mysum遵循上述协议成为 call ,并且它仅接受func本身的一个参数,即,传递给mysum的变量如何传递给调用函数?请赐教,这方面没有内容。

1 个答案:

答案 0 :(得分:0)

我明白了。

mysum = MyDecorator('arg1')(mysum)

第一步将是: Mydecorator('arg1'),这将提供一个装饰器对象,该对象将立即由mysum函数调用。 呼叫做出回应并返回 包装函数,该函数接受参数* args和** kwargs。这就是可用参数的方式。所以从本质上讲,mysum(x,y)被wrapper(* args, ** kwargs)