2014-01-15 56 views
0

首先我要聲明,我是相當新的Python編程,所以我的方法也許不正確解決問題的,請讓我知道,如果是這樣的話Singleton類沒有保留價值

我我正嘗試使用Singleton類將配置參數存儲在我的代碼中,並在需要時使用它。我遇到了一個問題,即在初始創建時存儲在Singleton中的數據在隨後對對象的調用中不會保留。

也許我創建Singleton對象的方式是不正確的,但我是跟隨在SO上的代碼示例。

首先這裏是我的Singleton類

class Config(object): 

    __instance = None 

    dbserver = "" 

    def __new__(cls): 
     if cls.__instance == None: 
      __instance = object.__new__(cls) 
      __instance.name = "Configuration Object" 
     return __instance 

這裏是我的Singleton實例

configurator = Config() 
configurator.dbserver = dbserver 

的初始創建隨後我做以下和dbserver屬性返回空字符串。

configurator = Config() 
print configurator.dbserver 

感謝您的閱讀時間。

+0

是否與http://stackoverflow.com/questions/42558/python-and-the-singleton-pattern相同 – Chandan

+1

cls .__ instance'永遠是None,所以每次創建新對象時都是如此。 – thefourtheye

回答

5

您似乎沒有將本地變量__instance分配給類變量cls.__instance

但是,如果你只是這樣做來存儲變量,我不知道爲什麼你需要一個實例。只需將它們直接存儲在類中(本身就是Python中的第一類對象),或者甚至可以使用Pythonic模塊。

編輯

使用類本身不會導致代碼重新每次運行:只在執行類級別代碼,當類是定義,這發生在第一次導入。

但是由於類必須位於某個模塊(文件)中,因此可以將所有代碼直接放在模塊中,然後將其導入到需要的位置。同樣,模塊級別的代碼只在第一次導入時執行。

+0

哇,Nub錯誤,非常感謝:) – DevZer0

+0

我正在從配置文件讀取配置並在運行時存儲在類中,但我看到你的建議我可以使用類它自己從配置讀取變量文件並使其可用。但是如果我不使用單例對象,每次使用它時都不得不重新讀取配置文件?你能否詳細說說你建議的Pythonic方法 – DevZer0

+0

這樣你說的不是創建配置文件,而是使用一個類作爲它自己的配置文件? – DevZer0