【问题标题】:in python webapp2 how put a __init__ in a handler (for get and post)在 python webapp2 中,如何将 __init__ 放入处理程序(用于获取和发布)
【发布时间】:2013-03-02 03:32:01
【问题描述】:

如何创建初始化代码? 当我把__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 )

【问题讨论】:

  • 关于何时在此处使用__new__super() 还有其他问题,请搜索。
  • 对“def”和“self”感到抱歉...是删减/过去的事情...已经更正...

标签: python webapp2


【解决方案1】:

终于明白了... 问题是覆盖“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 ...
    # ...

...就是这样... 现在按预期工作 ;-)

【讨论】:

  • 这可能很明显,但我必须仔细检查 - self.initialize(request, response) 不会调用任何父处理程序的构造函数,所以你需要明确地这样做(并将 self.initialize(request, response) 移动到父)。使用super(subclassNameHere, self).__init__(request, response) 致电家长。
【解决方案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

【讨论】:

  • 我正在使用 webapp2,代码是这样的----> class theHandler( webapp2.RequestHandler ): def __init__( self ): #def some class shared vars (...) 错误是----> TypeError: __init__() 只需要 1 个参数(给定 3 个) INFO 2013-03-13 23:30:43,937 dev_appserver.py:3104] "GET /rotx HTTP/1.1" 500 -
  • 对不起,令人困惑的文本...错误是:TypeError:__init__() 只需要 1 个参数(给定 3 个)INFO 2013-03-13 23:30:43,937 dev_appserver.py:3104] "GET /rotx HTTP/1.1" 500 -
  • @ZEE:发布你的实际类定义以及你如何初始化它。
  • 刚刚更新了非常简化的代码,只是为了暴露问题......我确定我在这里遗漏了一些东西......
  • @ZEE:你必须通读 Python 教程。你错过了很多核心概念:learnpythonthehardway.org/book
【解决方案3】:

您需要在类中的所有函数中都有一个self 变量。您需要包含此变量,该函数才能在您的类中工作。

here 可以很好地解释类中每个函数中需要 self 变量的必要性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2020-11-19
    • 2013-06-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 2015-04-09
    相关资源
    最近更新 更多