在webapp2和Python中实例化RequestHandler对象时,谁传递* args和** kwargs参数?

时间:2013-10-22 18:40:40

标签: python webapp2

我正在使用webapp2,在浏览完源代码后,我仍然无法弄清楚如何将*args**kwargs参数传递给RequestHandler对象。

我正在查看的代码示例如下所示(实际的完整代码源来自course-builder,可以找到here):

class ApplicationHandler(webapp2.RequestHandler):
    def __init__(self, *args, **kwargs):
        super(ApplicationHandler, self).__init__(*args, **kwargs)

有没有办法知道它们来自何处以及如何调试它们?

1 个答案:

答案 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}}。