Python 从类中的装饰函数返回到成员函数

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"

我已经编写了一个decorator函数,当我装饰到一个普通函数时,它工作得很好,但是当我装饰到类中的一个成员函数时,它的抛出类型错误:print_cmd()正好接受2个参数(给定1个参数)

decorator函数可以很好地与普通函数配合使用,但对于类的成员函数却不起作用

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的元素组成)。