2010-06-27 77 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