如何从没有继承的另一个类调用具有self.write的函数?

时间:2018-02-16 03:29:43

标签: python

我是Python新手并且正在尝试使用AppEngine来使用以下代码:

 class MainPage(webapp2.RequestHandler):
    def show(self, display=""):
        msg = """<!doctype html>
                            <head>
                                <meta charset="utf-8"/>
                                <title> Message </title>
                            </head>
                            <body>
                                <div name=text>
                                     %(text)s
                                </div>
                            </body>
                        </html>"""
                self.response.write(msg % {"text":display})

    class RetCall(webapp2.RequestHandler):
            self.response.headers['Content-Type'] = 'text/html'
            text_entered = self.request.get('text')
            text_entered = "Hey " + text_entered
            m = MainPage()
            m.show(text_entered)

MainPage中有一个get函数,我已将其排除在外。 当我以这种方式运行时,我收到错误:

  

AttributeError:'NoneType'对象没有属性'write'

我想通过使用m - MainPage的实例作为对象,它应该可行。我哪里错了?

2 个答案:

答案 0 :(得分:0)

那是因为webapp2.RequestHandler在构建时没有得到response。 Webapp2会自动创建一个响应类,并在将请求路由到它时将其传递给您的处理程序。有关详细信息,请参阅routing上的webapp2文档。

如果您只想测试自己的处理程序,请查看webapp2的unit testing文档。它不仅对单元测试很有用,而且还可以在python shell等交互式环境中进行尝试。

答案 1 :(得分:0)

传递self.response

 def show(response, display=""):
        msg = """<!doctype html>
                            <head>
                                <meta charset="utf-8"/>
                                <title> Message </title>
                            </head>
                            <body>
                                <div name=text>
                                     %(text)s
                                </div>
                            </body>
                        </html>"""
        response.write(msg % {"text":display})

class MainPage(BaseHandler):
    pass

class RetCall(BaseHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/html'
        text_entered = self.request.get('text')
        text_entered = "Hey " + text_entered
        show(self.response, text_entered)