类的装饰器里的__call__参数问题

新手初学python,输出的结果跟我想象中不一样

 `#定义一个类的装饰器Bold
class Bold(object):
    def __init__(self, func):
        self.func = func
    def __call__(self, *args, **kwargs):
        return '<b>' + self.func(*args, **kwargs) + '</b>'
        
   
    #相当于 hello=Bold(hello) 生成一个hello.func为hello函数的
    #Bold实例化对象  
    @Bold                        
    def hello(name):
        return 'hello %s' % name`
        
    #然后我打算传多个参数 *args
    >>> hello('ss','sss','aa')
    File "<stdin>", line 5, in __call__
    TypeError: hello() takes exactly 1 argument (3 given)`
    
    

这里完全不理解,这里的hello()里的参数不是__call__的args, *kwargs 吗,为什么变成只能是一个参数?

阅读 3.2k
1 个回答

*args, **kwargs 分别是表示可以接收可变参数和关键字参数,可以接收任何0个或者1个或者多个参数。
*args, **kwargs组合起来就是说__call__能接收任何参数啦~~但是顺序要对。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题