class singleton(object):
"""注釋"""
__instanc=none
def __init__(self,name,age):
self.name=name
self.age=age
def __new__(cls, name, age):
"""建立乙個單例的物件"""
#建立乙個__instance用來儲存第一次建立的物件引用
#如果是第一次建立,那麼進行父類的呼叫來建立乙個物件引用
#如果是第二次建立,那麼就返回上一次建立好的物件引用給他
#所以他們公用的同一類的屬性
if not cls.__instanc:
cls.__instanc=object.__new__(cls)
return cls.__instanc
a=singleton("modou",19)
b=singleton("lili",18)
print(id(a))
print(id(b))
b.addr="河南"
print(a.age)
print(a.name)
print(a.addr)
執行結果是
這時就能發現,兩次建立的例項物件的id值是一樣的,id值一樣的話那麼代表指向的是同乙個物件。所以裡面的資料都是公用的
這就是為什麼明明在a例項物件中定義了name和age的引用值,但是確實b的值。因為python中一切都是賦值都是引用。
總結
python設計模式 單例設計模式
樣式一 class musicplayer object instance none 設定類屬性,用來判斷是否有物件得到記憶體空間 init flag false 0表示還沒有初始化 1代表已經初始化 使用內建函式進行空間的分配 def new cls,args,kwargs cls 哪個類呼叫,就...
Python中的單例設計模式
印表機物件 站物件 四 new 方法 在記憶體中為物件分配空間 返回物件的引用 重寫 new 方法的格式非常固定 eg class musicplayer 建立乙個類屬性,記錄第乙個被建立物件的引用 instance none def new cls,args,kwargs 判斷類屬性是否為空 if...
python中的單例設計模式
設計模式 是前人工作的總結和提煉,是對某一問題的成熟的解決方案,使用設計模式是為了可重用 讓 更容易被他人理解和 的可靠性 單例設計模式 a.目的 讓類建立物件,在系統中只有乙個唯一的乙個例項 b.每一次執行類名返回的物件,記憶體位址是相同的 記錄第一次被建立的引用 instance none 重寫...