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

2024-09-30 01:28:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用webapp2,在浏览了它的源代码之后,我仍然无法理解*args和{}参数是如何传递给RequestHandler对象的。在

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

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

有没有办法知道这些是从哪里来的,以及如何调试它们?在


Tags: 对象代码self示例参数here源代码init
1条回答
网友
1楼 · 发布于 2024-09-30 01:28:58

*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,因为参数传递给了B 构造函数已传递给__init__中的A构造函数。 如果您在B.__init__中添加print args,您将看到("HELLO", )。在

相关问题 更多 >

    热门问题