装饰函数使用* args和** kargs作为其__call__方法的参数,

时间:2019-03-03 14:15:22

标签: python

我当前正在使用一个修饰过的函数,如果在decorator类中某个布尔值设置为True,则应该检查该函数的注释。我有点困惑的是装饰器函数的__call__方法标头:

def __call__(self, *args, **kargs):

及其参数列表。

我知道其参数*args**kargs用于提供给该函数的参数,但是在我要处理的问题中,我必须调用原始函数(这是一个属性在由名为_f的装饰器类创建的实例对象中)。

如何使用提供给装饰函数的参数调用_f?我是否应该检查一下args / kargs是否为空并为非空参数调用self._f(args) / self._f(kargs)

1 个答案:

答案 0 :(得分:0)

装饰方法时:

class Foo:

    @someDecorator
    def my_method(self, x, y):
        ...

它实际上还不是一种方法;这只是一个功能。在装饰器内部,您将其视为:

def someDecorator(f):
    def _(*args, **kwargs):
        ...
        return f(*args, **kwargs)
    return _

调用_时,self中将包含*args