【问题标题】:Class Decorators that accept arguments接受参数的类装饰器
【发布时间】:2020-04-02 03:17:25
【问题描述】:

我一直在尝试理解这个类装饰器:

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 的变量如何传递给调用函数?请赐教,这方面的资料不足。

【问题讨论】:

    标签: python-2.7 python-decorators


    【解决方案1】:

    我明白了。

    mysum = MyDecorator('arg1')(mysum)
    

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

    【讨论】:

      猜你喜欢
      • 2020-06-20
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 2015-09-03
      • 2015-08-14
      • 2019-05-13
      • 2011-11-21
      相关资源
      最近更新 更多