我一直试图了解此类装饰器:
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的变量如何传递给调用函数?请赐教,这方面没有内容。
答案 0 :(得分:0)
我明白了。
mysum = MyDecorator('arg1')(mysum)
第一步将是:
Mydecorator('arg1')
,这将提供一个装饰器对象,该对象将立即由mysum函数调用。 呼叫做出回应并返回
包装函数,该函数接受参数* args和** kwargs。这就是可用参数的方式。所以从本质上讲,mysum(x,y)被wrapper(* args,
** kwargs)