2016-07-14 52 views
0

我想知道這種創建單例的方法是否正確。如何創建一個單例?

my_class.py

class MyClass(object): 
    def a_method(self): 
     print("Hello World") 
    ... 

MY_CLASS_SINGLETON = MyClass() 

另一個模塊:

from my_class import MY_CLASS_SINGLETON 

if __name__ == "__main__": 
    MY_CLASS_SINGLETON.a_method() 

因此,此代碼爲我工作,但我納悶的是,如果它被用於任何其他之前,垃圾收集器可能會破壞MY_CLASS_SINGLETON實例模塊,因爲最後它只是my_class.py模塊中的一個臨時變量。

+3

這不是一個「臨時變量」。這是您的模塊中定義的名稱。 Python也不會垃圾收集'MyClass',即使這也只是模塊中的命名對象。 – deceze

+0

好吧,我不知道範圍。關於「單身人士」,我確實可以創造更多的實例,但在我的情況下,我不擔心這一點。謝謝你的澄清雖然:) 編輯:這個答案的一部分是不適合你,但爲@AnnetteC,抱歉的困惑。 –

+0

[有沒有簡單,優雅的方式來定義Python中的單身?](http://stackoverflow.com/questions/31875/is-there-a-simple-elegant-way-to-define-singletons- in-python) – pat

回答

0

我會假設你的實現不是保存單例,只要你可以輕鬆創建MyClass的新實例。單身人士應該避免這種情況,只需要自己持有這個實例,並且只是返回這個實例 - 你的實例不在類中。 (但是我自己對Python很陌生,當時我只是維護程序化的Python代碼。)

但是您看過嗎?here

+0

謝謝你的鏈接。我已經看到了它,但是我發現它比我想的要複雜(當然也是爲了我的需要)。 關於能夠創建多個實例,這對我的情況是可以的。 謝謝。 –

+0

但是你在做什麼不是實現單例模式。你只提供一個常量。可能對你的用例沒有問題,但如果其他依賴於你的代碼並且認爲它是單例,那麼它可能會導致問題。請看看單身模式的想法。 – AnnetteC

+0

你說得對,我只是使用了錯誤的名字'singleton'。我從單例模式中唯一需要的是能夠從任何地方訪問同一個實例。 –