在Python webapp2中如何在处理程序中放入__init__(用于GET和POST)

9 投票
3 回答
2599 浏览
提问于 2025-04-17 19:00

我该如何创建初始化代码?当我使用 __init__ 构造函数时,总是提示我参数有问题。

另外,请有人给个例子,展示如何使用 __new__super(),并解释一下我们为什么要用或者不使用它们。

import webapp2

class MainHandler( webapp2.RequestHandler ):
    def __init__( self ):
        #initialization code/vars
        x = 1

    def get( self ):
        #code for get here
        self.response.write( x+1 )

    def post( self ):
        #code for post here
        self.response.write( x+2 )

app = webapp2.WSGIApplication ( [ ('/', MainHandler) ], debug=True )

3 个回答

0

在你定义的类里的所有函数中,都需要有一个叫做 self 的变量。这个变量是必须的,只有这样函数才能在你的类里正常工作。

关于为什么每个类中的函数都需要这个 self 变量,有一个很好的解释可以在 这里 找到。

2

如果你在__init__方法里没有传递任何参数,也没有写自己的代码,通常就没必要自己创建这个方法。你可以直接使用webapp2.RequestHandler里的__init__方法。

如果你确实需要创建一个,那么你还是得调用webapp2.RequestHandler.__init__

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

        self.your_arg = your_arg
14

终于搞明白了...

问题在于,重写 "webapp2.RequestHandler" 需要特别的处理。

来自 webapp2 手册的说明:

如果你想重写 webapp2.RequestHandler.init() 方法,你必须在方法开始时调用 webapp2.RequestHandler.initialize()。这样可以把当前的请求、响应和应用对象设置为处理器的属性。

示例:

class MyHandler(webapp2.RequestHandler):
    def __init__(self, request, response):
    # Set self.request, self.response and self.app.
    self.initialize(request, response)
    # ... add your custom initializations here ...
    # ...

...就这样...

现在一切正常了;-)

撰写回答