物件導向(7 單例

2021-10-08 03:21:20 字數 2138 閱讀 3103

單例設計模式

單例設計模式的應用場景

**站物件

印表機物件

. . . . . .

重寫 __ new __方法的**非常固定

**實現

class

musicplayer

(object):

# 重寫new方法

def__new__

(cls,

*args,

**kwargs)

:# 1.建立物件時,new方法會被自動呼叫

print

('建立物件,分配空間'

)# 2.為物件分配空間

# 分配空間可以直接使用 super().方法名 呼叫父類的方法

instance =

super()

.__new__(cls)

# 注意:new方法是乙個靜態方法,我們在呼叫的時候必須傳入引數cls

# 3.返回物件的引用

return instance

def__init__

(self)

:print()

player = musicplayer(

)print

(player)

**實現

class

musicplayer

(object):

# 記錄第乙個被建立物件的引用

instance =

none

def__new__

(cls,

*args,

**kwargs)

:# 1.判斷類屬性是否為空物件

if cls.instance is

none

:# 2.呼叫父類的方法,為第乙個物件分配空間

cls.instance =

super()

.__new__(cls)

# 3.返回類屬性儲存的物件引用

return cls.instance

def__init__

(self)

:print()

# 建立多個物件,檢視它們的記憶體位址是否一樣

player1 = musicplayer(

)print

(player1)

player2 = musicplayer(

)print

(player2)

class

musicplayer

(object):

# 記錄第乙個被建立物件的引用

instance =

none

# 記錄是否執行過初始化動作

init_flag =

false

def__new__

(cls,

*args,

**kwargs)

:# 1.判斷類屬性是否為空物件

if cls.instance is

none

:# 2.呼叫父類的方法,為第乙個物件分配空間

cls.instance =

super()

.__new__(cls)

# 3.返回類屬性儲存的物件引用

return cls.instance

def__init__

(self)

:# 1.判斷是否執行過初始化動作

if musicplayer.init_flag:

return

# 2.如果沒有執行過,再執行初始化動作

print()

# 3.修改類屬性的標記

musicplayer.init_flag =

true

# 建立多個物件,檢視它們的記憶體位址是否一樣

player1 = musicplayer(

)print

(player1)

player2 = musicplayer(

)print

(player2)

物件導向 單例模式

設計模式 解決某一類問題行之有效的解決辦法 思想 單例 singleton 設計模式 學習設計模式必須先弄清楚它是解決什麼問題的。單例是解決什麼問題的呢?可以保證乙個類的物件唯一性。場景 比如多個程式都要使用乙個配置檔案中的資料,而且要實現資料共享和交換。必須要將多個資料封裝到乙個物件中。而且多個程...

物件導向單例,異常

單例設計模式 目的 讓類建立的物件,在系統中只有唯一的乙個例項 每一次執行類名 返回的物件,位址是相同的 new 方法 使用類名 建立物件時,pyton中的直譯器會首先呼叫 new 方法作為物件 new 是乙個由object基類提供的內建靜態方法,主要作用有兩個 在內從中為物件分配空間 返回物件的引...

Python 物件導向 單例

單例設計模式 重寫 new 方法 的 非常固定!如果不返回任何結果,定義類屬性記錄單例物件引用 instance none def new cls,args,kwargs 1.判斷類屬性是否已經被賦值 if cls.instance is none cls.instance super new cl...