0

*args我正在使用 webapp2,在浏览了它的源代码后,我仍然不知道如何将 **kwargs参数传递给RequestHandler对象。

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

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

有没有办法知道这些来自哪里以及如何调试它们?

4

1 回答 1

0

*args表示“所有位置参数”,并**kwargs表示“所有关键字参数”。它的魔力来自小星星(*and **),而不是名字(实际上,它可以是任何名字,例如使用*fooand 可以达到相同的效果**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,因为传递给 B 构造函数的参数已传递给 A 构造函数__init__。如果你添加print args进去B.__init__,你会看到("HELLO", )

于 2013-10-22T18:51:43.823 回答