Python 从类中的装饰函数返回到成员函数
我已经编写了一个decorator函数,当我装饰到一个普通函数时,它工作得很好,但是当我装饰到类中的一个成员函数时,它的抛出类型错误:print_cmd()正好接受2个参数(给定1个参数) decorator函数可以很好地与普通函数配合使用,但对于类的成员函数却不起作用Python 从类中的装饰函数返回到成员函数,python,Python,我已经编写了一个decorator函数,当我装饰到一个普通函数时,它工作得很好,但是当我装饰到类中的一个成员函数时,它的抛出类型错误:print_cmd()正好接受2个参数(给定1个参数) decorator函数可以很好地与普通函数配合使用,但对于类的成员函数却不起作用 ss=[] def deco(func): def new_func(*args, **kwargs): for i in new_arg: "Do some operation"
ss=[]
def deco(func):
def new_func(*args, **kwargs):
for i in new_arg:
"Do some operation"
return func(','.join(ss))
return new_func
class aaa:
@deco
def print_cmd(self,cmd):
print cmd
ii=aaa()
ii.print_cmd('hello,ff,are')
TypeError:print_cmd()只接受2个参数(给定1个)为了正确地使用原始参数调用包装函数,请尝试以下代码:
return func(*args, **kwargs)
原始代码使用单个字符串参数调用包装函数,而不是原始函数的参数:
return func(','.join(ss))
你能把你的@deco也放进去吗?我的意图是重构cmd,如果我传回*args,**kwargs。我不会得到修改后的cmd,它是“,”。join(ss)如果我使用正常的函数,这个装饰器工作得很好,我对Classic中的成员函数有问题。它不处理类中的成员函数,因为它们接受多个参数。在任何接受1个以上参数的函数上尝试您的decorator,它将不起作用。它还将阻止修饰函数正常工作,因为它不发送原始参数,而是发送您正在创建的字符串(由列表ss的元素组成)。