python中單例模式

2022-05-09 23:19:02 字數 2067 閱讀 8244

一、單例模式設計基礎概念:

單例模式(singleton pattern)是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出現乙個例項時,單例物件就能派上用場。

目的:讓建立物件,在系統中只有唯一的乙個實例子

每一次執行類名()返回的物件、記憶體位址是相同的

二、__new__方法:

在記憶體中為物件分配空間返回物件的引用**:

1

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)

三、python中的單例定義乙個類屬性,初始值是none,用於記錄單例物件的引用重寫__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...