16 - 單例模式&魔法方法

返回主頁

📄目錄

1 單例模式

可以理解成一個特殊的類,這個類只存在一個對象

單例模式:每一次實例化所創建的對象都是同一個,內存地址都一樣

1.1 實現單例模式的方式

1.1.1 通過@classmethod

1.1.2 通過裝飾器實現

1.1.3 通過重寫__new__()實現(常用、重點)

python-logo

❗ 當實例化不同對象的時候,內存地址會發生變化

輸出結果:

👉🏻 內存地址發生變化,說明是不同的對象

💡 實現單例模式,對象的內存地址都會是一樣的,只有一個對象

💡 設計流程:

  1. 定義一個類屬性,初始值為None,用來記錄單例對象的引用

  2. 重寫__new__()方法

  3. 進行判斷,如果類屬性是None,把__new__()返回的對象引用保存進去

  4. 返回類屬性中記錄的對象引用

python-logo

輸出結果:

 

1.1.4 通過導入模塊實現

模塊就是天然的單例模式,但是比較雞肋

python-logo

在當前文件夾建立pytest3.py,並輸入:

然後在本文件運行以下代碼:

輸出結果:

1.2 應用場景

  1. 回收站對象

  2. 音樂播放器,一個音樂播放軟件負責音樂播放的對象只有一個

  3. 開發遊戲軟件——場景管理器

  4. 數據庫配置、數據庫連接池的設計(節省打開或者關閉的效率消耗)

2 魔法方法

含義:在Python中,__xx__()的函數被稱為魔法方法,指具有特殊功能的函數

  1. __new__():在內存中為對象分配空間並返回對象的引用

  2. __init__():初始化對象或給屬性賦值

  3. __doc__:類的描述信息

  4. __module__:表示當前操作對象所在模塊

  5. __class__:表示當前操作對象所在的類

  6. __str__():對象的描述信息

  7. __del__():刪除對象(析構函數)

  8. __call__():使一個實例對象成為一個可調用對象

  9. __dict__():返回對象具有的屬性和方法

2.1 類的描述信息 __doc__()

python-logo

輸出結果:

2.2 __module__()__class__()

python-logo

在當前文件夾建立pytest3.py,並輸入:

然後在本文件運行以下代碼:

輸出結果:

2.3 __str__():對象的描述信息

💡 如果類中定義了此方法,那麼在打印對象時,默認輸出該方法的返回值,即打印方法中return的數據

❗ 注意:__str__()必須返回一個字符串

python-logo

輸出結果:

2.4 __call__():使一個實例對象成為一個「可調用對象」,像函數那樣可以調用

可調用對象:凡是可以把一對()應用到某個對象上,都可以被稱為可調用對象

例子:函數、內置函數、類

python-logo

callable():判斷一個對象是否可調用對象

輸出結果:

python-logo

輸出結果:

導航連結:

目的地超連結
首頁返回主頁
Python學習Python學習
上一篇15 - 多繼承&多態
下一篇17 - 文件讀寫