2010-06-27 68 views

回答

1

使用WSGIApplication实例记录debug参数作为self.__debug的价值:双下划线是迹象表明,在类外没有代码本身应该是看这个属性,因为它被认为是一个内部应用程序细节并且可以随时改变(即使在API的小修改中)。如果你想忽略这个非常强烈的迹象,你可以可以,从技术上讲,使用webapp.WSGIApplication.active_instance._WSGIApplication__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_instance.debugmode成为cleansolid从应用程序中的任何其他位置访问感兴趣的属性的方法。

+0

所以,我打破了通过子类封装......这不是像直接读取值的危险那样危险吗? – 2010-06-27 18:27:51

+1

这个建议并没有破坏封装,也没有危险 - 你可以依靠'debugmode'来控制代码(不像试图直接访问WSGIApplication的'__debug'字段)。 – 2010-06-27 19:04:42

+0

@Rosarch,我很困惑 - 你从哪里读过或以其他方式“学习”子类化破坏封装?子类化在OOP中是一个基本的东西,我提出的子类甚至不会窥探基类的_any_属性,它只是“动态地”捕获“__init__”参数的副本 - 它怎么可能* *完全可以**“封装破坏”?请说明你的担心。 – 2010-06-27 20:43:28

相关问题