Python Google应用程序引擎/WSGIApplication:如何检查调试?

Python Google应用程序引擎/WSGIApplication:如何检查调试?,python,google-app-engine,Python,Google App Engine,在WSGIApplication的构造函数中,它接受一个debug参数。是否有方法从继承自webapp.RequestHandler的处理程序类访问为此设置的值 def main(): application = webapp.WSGIApplication([('/', fooHandler) ], debug=True)

WSGIApplication
的构造函数中,它接受一个
debug
参数。是否有方法从继承自
webapp.RequestHandler
的处理程序类访问为此设置的值

def main():
    application = webapp.WSGIApplication([('/', fooHandler)
                                          ],
                                        debug=True)
    util.run_wsgi_app(application)

WSGIApplication实例将
debug
参数的值记录为
self.\uu debug
:双下划线是strong表示类本身之外的任何代码都不应该查看此属性,因为它被视为内部应用程序细节,并且可以“随时”更改(即使是在API的一个小版本中)。如果你想忽略这个非常强烈的指示,从技术上讲,你可以使用
webapp.WSGIApplication.active\u instance.\u WSGIApplication\uu debug
来查看它,但这确实是个坏主意

更好的方法是在您自己的代码中对
WSGIApplication
进行子类化,以使属性公开可见:

class MyWSGIapp(webapp.WSGIApplication):
    def __init__(self, url_mapping, debug=False):
        self.debugmode = debug
        webapp.WSGIApplication.__init__(self, url_mapping, debug)

现在,当您使用
MyWSGIapp
而不是
webapp.WSGIApplication
来启动时,
webapp.WSGIApplication.active\u instance.debugmode
成为一种干净、可靠的方式,可以从应用程序中的任何其他地方访问感兴趣的属性。

因此,我正在通过子类化来打破封装……这是不是几乎一样与一开始直接读取值一样危险?此建议不会破坏封装,也不危险-您可以依赖
debugmode
,因为您可以控制该代码(与直接访问
WSGIApplication
\u debug
字段不同)@Rosarch,我很困惑——你从哪里读到或“了解”到子类化破坏了封装?!子类化在OOP中是一个基本的东西,我建议的子类甚至不看基类的任何属性,它只是动态地“捕获”一个
\uu init\uuuuuuuuu
参数的副本——这怎么可能呢“封装破坏”?请澄清您的担忧。看起来我读您的示例太快了。您使用的复制示例的方法很好。我认为您的意思是“对基进行子类化,然后对基中受保护的成员使用公共getter。”(使用Java术语)。后者似乎是个糟糕的主意,但您建议的前者是有意义的。@Rosarch,感谢您的澄清。如果属性是“受保护的”(名称开头的单下划线),则可以从子类访问该属性,但调试属性是“私有的”(名称开头的双下划线),这意味着“大家都不要插手!”,所以使用子类访问它当然没有意义(也没有区别)——正如你们现在看到的,我的方法是非常不同的。我认为交换很有启发性,所以,谢谢!