單例模式(Singleton Pattern)是一種經常使用的軟件設計模式,該模式的主要目的是確保某 一個類只有一個實例存在。當你但願在整個系統中,某個類只能出現一個實例時,單例對象就 能派上用場。 單例類:若是一個類,從頭至尾只開闢了一塊屬於對象的空間,那麼這個類就是一個單例類。 準備工做: ----#__init__()方法叫初始化方法 ----#__new__()方法叫構造方法 例子: <1> class A: def __new__(cls, *args, **kwargs): print('new') def __init__(self): print('init') a = A() 結果:new <2> class A: def __new__(cls, *args, **kwargs): print('new') obj = super().__new__(cls) return obj def __init__(self): print('init') a = A() 結果:new init 須要知道,咱們實例化對象的時候,會有三個步驟: 1.開闢一個空間,給對象 2.把對象的空間傳給self,並執行init方法 3.將這個對象的空間返回給調用者 第一步的開闢一個空間就是構造函數 __new__()來完成的。 第二步,將對象空間傳給self,咱們從例子<1>能夠看出, 不返回空間,self是不會收到的,因此咱們給出了例子<2> 這樣第二步就執行了。 第三步,咱們將對象的空間返回給調用者。 __new__()方法在何時執行? 答:在實例化以後,__init__()以前,先執行 __new__()來建立一塊空間 瞭解這些,咱們就開始寫一個單例類: 單例類:若是一個類,從頭至尾只開闢了一塊屬於對象的空間,那麼這個類就是一個單例類。 例子: <1> class Single: __INSTANCE = None def __new__(cls, *args, **kwargs): if not cls.__INSTANCE: cls.__INSTANCE = super().__new__(cls) return cls.__INSTANCE s0 = Single() s1 = Single() print(s0) print(s1) 結果: <__main__.Single object at 0x10e7f0630> <__main__.Single object at 0x10e7f0630> <2> class Foo: __INSTANCE = None @classmethod def get_instance(cls): if cls.__INSTANCE: return cls.__INSTANCE else: cls.__INSTANCE = Foo() return cls.__INSTANCE f0 = Foo() f1 = Foo() print(f0.get_instance()) print(f1.get_instance()) 結果: <__main__.Foo object at 0x10f4354e0> <__main__.Foo object at 0x10f4354e0>