我正在使用webapp2,在浏览完源代码后,我仍然无法弄清楚如何将*args
和**kwargs
参数传递给RequestHandler
对象。
我正在查看的代码示例如下所示(实际的完整代码源来自course-builder,可以找到here):
class ApplicationHandler(webapp2.RequestHandler):
def __init__(self, *args, **kwargs):
super(ApplicationHandler, self).__init__(*args, **kwargs)
有没有办法知道它们来自何处以及如何调试它们?
答案 0 :(得分:0)
*args
表示“所有位置参数”,**kwargs
表示“所有关键字参数”。
它的魔力来自小星星(*
和**
),而不是名字(实际上,
它可以是任何名称,例如*foo
和**bar
可以实现相同的效果
*
)。
**
和print args
可用于任何函数,而不仅仅是构造函数。参数存储在变量中,名称在星号后面给出;例如,print kwargs
将打印位置参数的列表,ApplicationHandler
将显示关键字参数的字典。
在像你问题中那样的继承案例中,调用它是很常见的 基类,所有相同的参数都传递给子类构造函数。
webapp2.RequestHandler
继承自super
和
在构造函数中,它使用 class A:
def __init__(self, arg1):
self.my_value = arg1
class B(A):
def __init__(self, *args):
super(B, self).__init__(*args)
b = B("HELLO")
调用超类(基类)
关键字,将所有参数传递给它。
让我们研究这个例子:
print b.my_value
HELLO
将显示__init__
,因为参数传递给B
构造函数已传递给print args
中的A构造函数。
如果您在B.__init__
中添加("HELLO", )
,则会看到{{1}}。