我正在尝试使用class-decorator来装饰类方法。例如
class MyDecorator(object):
def __init__(self,param1):
self.param1 = param1
# do some action with param1
def __call__(self,func):
def wrapped(*args,**kwargs):
print "in wrapper:"
func(*args,**kwargs)
return wrapped
和我的一些课程:
class A:
@MyDecorator("Blablabla")
def func1(arg1,arg2,arg3):
print (arg1,arg2,arg3)
但是当我做下一步行动时:
a = A()
a.func(1,2,3)
我收到以下错误:
TypeError: func1() takes exactly 3 arguments (4 given)
答案 0 :(得分:2)
class A:
@MyDecorator("Blablabla")
def func1(self, arg1, arg2, arg3):
print (arg1,arg2,arg3)
您需要在函数中添加self参数。
答案 1 :(得分:1)
如果您希望在没有第一个func1
参数的情况下编写self
方法,则需要在装饰器中删除此参数:
def __call__(self, func):
def wrapped(obj, *args, **kwargs):
# obj is just ignored
print "in wrapper:"
func(*args, **kwargs)
这与使用@staticmethod
完全相同:调用a.func1
时,a
作为第一个参数传递,但装饰器会删除此参数。