您好,登錄后才能下訂單哦!
這篇“python實現單例的方法有哪些”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“python實現單例的方法有哪些”文章吧。
New 是真正創建實例對象的方法,所以重寫基類的new 方法,以此保證創建對象的時候只生成一個實例
class Singleton(object): def __new__(cls, *args, **kwargs): # hasattr 判斷是否有...屬性 if not hasattr(cls, '_instance'): cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs) return cls._instance class Foo(Singleton): pass foo1 = Foo() foo2 = Foo() print(foo1 is foo2)
def Singleton(cls): instance = {} def wrapper(*args, **kwargs): if cls not in instance: instance[cls] = cls(*args, **kwargs) return instance[cls] return wrapper @Singleton class Foo(object): pass foo1 = Foo() foo2 = Foo() print(foo1 is foo2)
單例模式(Singleton Pattern)是一種常用的軟件設計模式,該模式的主要目的是確保某 一個類只有一個實例存在。
當你希望在整個系統中,某個類只能出現一個實例時,單例對象 就能派上用場。
比如,某個服務器程序的配置信息存放在一個文件中,客戶端通過一個 AppConfig 的類來 讀取配置文件的信息。
如果在程序運行期間,有很多地方都需要使用配置文件的內容,也就 是說,很多地方都需要創建 AppConfig 對象的實例,這就導致系統中存在多個 AppConfig 的實例對象,而這樣會嚴重浪費內存資源,尤其是在配置文件內容很多的情況 下。
事實上,類似 AppConfig 這樣的類,我們希望在程序運行期間只存在一個實例對象。 注意:在python中導入模塊就是一種單例模式
簡單來說單列模式就是創建單列對象,重寫object類里面的__new__方法使之開辟一個內存空間,所有對象都指向同一內存空間,使多個對象的引用地址相同
class Dog (object): __instance=None def __new__(cls, *args, **kwargs): if cls.__instance==None: cls.__instance=object.__new__(cls) return cls.__instance else: return cls.__instance dog=Dog() dog1=Dog() print(id(dog)) print(id(dog1))
運行結果:
你會發現兩個對象的id一樣 這也就說明兩個對象指向的內存地址就一樣,這個就是單例對象
以上就是關于“python實現單例的方法有哪些”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。