在下面的应用装饰器时,我得到一个错误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)
答案 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?