python类装饰器错误

时间:2018-04-11 14:44:14

标签: python

在下面的应用装饰器时,我得到一个错误TypeError: rt() takes exactly 2 arguments (1 given),如何克服这一点。函数装饰器也是如此,因为父类是hIs。如何解决这个问题。

class applyfilter(object):
    def __init__(self,f):
       self.f=f
    def __call__(self,*args):
       self.f(*args) 

def applyfilter(f):
    def rt1(*args):
        print f.__name__
        print args
        return f(*args)
    return rt1

 class T1(SuperClass):
     @applyfilter
     def rt(self,data):
        print "In function rt" 

t=T1()
t.rt(123)

TypeError: rt() takes exactly 2 arguments (1 given)

1 个答案:

答案 0 :(得分:1)

我认为你想在函数调用中使用*运算符,如下所示:

def rt1(*args):
    print f.__name__
    print args
    return f(*args)

这样,rt1的参数将打包到args,然后在调用f(*args)时解压缩。

参考:What does ** (double star/asterisk) and * (star/asterisk) do for parameters?