一、單例模式設計基礎概念:
單例模式(singleton pattern)是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出現乙個例項時,單例物件就能派上用場。二、目的:讓
類
建立物件,在系統中只有唯一的乙個實例子每一次執行
類名()
返回的物件、記憶體位址是相同的
__new__
方法:
在記憶體中為物件分配空間
返回物件的引用
**:
1三、python中的單例定義乙個類屬性,初始值是none,用於記錄單例物件的引用重寫class
phone(object):
2def
__new__(cls, *args, **kwargs):3#
1、建立物件時,new方法會被自動化呼叫
4print("
建立物件,分配空間")
5#2、為物件分配空間
6 instance = super().__new__
(cls)7#
3、返回物件的引用
8return
instance
9def
__init__
(self):
10print("
手機初始化...")
1112
#例項化phone
13 phone =phone()
14print(phone)
__new__()
方法
如果類屬性 is none,呼叫父類方法分配空間,並在類屬性中記錄結果
返回類屬性中記錄的物件引用
記錄乙個被建立物件的引用(此處加個類屬性,主要是為了保障類返回位址的唯一性)
3 instance =none45
#記錄是否執行過初始化方法(未做標記處理的話,在初始化過程中會被執行多次)
6 init_flag =false
7def
__new__(cls, *args, **kwargs):8#
1、判斷類屬性是否是空物件
9if cls.instance is
none:10#
2、呼叫父類的方法,為第乙個物件分配物件
11 cls.instance = super().__new__
(cls)12#
3、返回類屬性儲存的物件引用
13return
cls.instance
1415
def__init__
(self):16#
1、判斷是否執行過初始化動作
17if
singletontest.init_flag:
18return19#
2、如果沒有執行過,在執行初始化動作
20print("
初始化物件。。。")
21#3、修改類屬性標記
22 singletontest.init_flag =true23#
print("初始化物件。。。")
2425 singleton1 =singletontest()
26print
(singleton1)
27 singleton2 =singletontest()
28print(singleton2)
Python中單例設計模式
class singleton object 注釋 instanc none def init self,name,age self.name name self.age age def new cls,name,age 建立乙個單例的物件 建立乙個 instance用來儲存第一次建立的物件引用 如...
python中的單例模式
單例模式 顧名思義是只有乙個例項記憶體位址,根據意思理解就是不論建立多少個例項物件,都只有乙個記憶體位址,單例模式是基於類的,是例項類物件,有別與 init init 是例項化物件.如下 domeclass single instance object instance none def init ...
Python 中的單例模式
單例就是解決在記憶體中始終只有乙個例項物件的問題,在python中實現起來很簡單,python中是通過new函式來分配記憶體的,舉個栗子 class musicplayer instance none def new cls,args,kwargs if cls.instance is none c...