語言是共通的,想要用不同語言實現單例模式,首先要清楚什麼是單例模式,單例模式即乙個類有且僅有乙個例項,那麼通過python怎麼實現乙個類只能有乙個例項呢。
首先先建立乙個類,比如宇宙只有乙個地球
class earth:
pass
a = earth()
print(id(a))
b = earth()
print(id(b))
執行結果如下:
通過列印例項的id可以發現,地球類預設建立了兩個例項。
那麼怎麼能夠讓類只建立乙個例項,而後再建立的例項是返回上一次的物件的引用呢?
我們了解到,python中,乙個類建立物件例項是通過呼叫父類object的 __new__(cls)方法來建立物件的
我們可以通過重寫 __new__(cls)方法去實現類只建立乙個例項
**如下:
class earth(object):
__instance=none #定義乙個類屬性做判斷
def __new__(cls):
if cls.__instance==none:
#如果__instance為空證明是第一次建立例項
#通過父類的__new__(cls)建立例項
cls.__instance=object.__new__(cls)
return cls.__instance
else:
#返回上乙個物件的引用
return cls.__instance
a = earth()
print(id(a))
b = earth()
print(id(b))
執行結果如下:
可以看出它們id相同,是同乙個物件。
python實現單例模式
最近在寫乙個連線池,而連線池管理類不可避免的需要使用單例來保證所有使用者在取得連線時取到的一定是同乙個管理物件。故將此模式取來研究一番。保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點 設計模式 單例模式是全域性只有乙個訪問點,故對於乙個類來說,任何例項化後訪問到的都應該是同樣的物件。而也有另...
Python 實現單例模式
encoding utf 8 print 方法1 方法1,實現 new 方法 並在將乙個類的例項繫結到類變數 instance上,如果cls.instance為none說明該類還沒有例項化過,例項化該類,並返回 如果cls.instance不為none,直接返回cls.instance class ...
python實現單例模式
單例模式,簡單來說,就是乙個類只能有乙個例項,並且能夠自行例項化向整個系統提供。例如檔案系統和任務管理器等。由此可見,單例模式的要點有三個 1.乙個類只能有乙個例項 2.它必須自行建立這個例項 3.它必須自行向整個系統提供這個例項 在python實現單例模式的方法總結起來有四種及其對應 如下 1.魔...