AI專業python高階(3)

2021-09-07 20:22:51 字數 1756 閱讀 1548

使用 類名() 建立物件時,python 的直譯器 首先 會 呼叫 __new__ 方法為物件 分配空間
new是乙個 由 object 基類提供的 內建的靜態方法,主要作用有兩個:

在記憶體中為物件 分配空間

返回 物件的引用

python 的直譯器獲得物件的 引用 後,將引用作為 第乙個引數,傳遞給init方法

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

重寫new方法 一定要 return super().new(cls)

否則 python 的直譯器 得不到 分配了空間的 物件引用,就不會呼叫物件的初始化方法

注意:new是乙個靜態方法,在呼叫時需要 主動傳遞 cls 引數

python 中的單例

* 單例 —— 讓 類 建立的物件,在系統中 只有 唯一的乙個例項

1. 定義乙個 類屬性,初始值是 none,用於記錄 單例物件的引用

2. 重寫 __new__ 方法

3. 如果 類屬性 is none,呼叫父類方法分配空間,並在類屬性中記錄結果

4. 返回 類屬性 中記錄的 物件引用

只執行一次初始化工作

在每次使用 類名() 建立物件時,python 的直譯器都會自動呼叫兩個方法:

new分配空間

init物件初始化

在上一小節對new方法改造之後,每次都會得到 第一次被建立物件的引用

但是:初始化方法還會被再次呼叫

捕獲異常 try…except…

xx: 公有變數
_x: 單前置下劃線,私有化屬性或方法,from somemodule import *禁止匯入,類物件和子類可以訪問

__xx:雙前置下劃線,避免與子類中的屬性命名衝突,無法在外部直接訪問(名字重整所以訪問不到)

xx:雙前後下劃線,使用者名字空間的魔法物件或屬性。例如:init , __ 不要自己發明這樣的名字

通過name mangling(名字重整(目的就是以防子類意外重寫基類的方法或者屬性)如:_class__object)機制就可以訪問private了。

父類中屬性名為__名字的,子類不繼承,子類不能訪問
如果在子類中向__名字賦值,那麼會在子類中定義的乙個與父類相同名字的屬性

_名的變數、函式、類在使用from *** import *時都不會被匯入

私有屬性新增getter和setter方法

使用property公升級getter和setter方法

使用property取代getter和setter方法

==和is

is 是比較兩個引用是否指向了同乙個物件(引用比較)。

== 是比較兩個物件是否相等。

淺拷貝

淺拷貝是對乙個物件的頂層拷貝

通俗的理解就是:拷貝了引用,並沒有拷貝內容

深拷貝

深拷貝是對於乙個物件所有層次的拷貝(遞迴)

拷貝的其他方式

淺拷貝對不可變型別和可變型別的copy不同

AI專業簡單筆記

進入目錄 cdcd 返回上一層 cd 返回到上次的目錄 cd 快速回到家目錄 檢視目錄列表 lsls a 檢視隱藏檔案 ls l 檢視檔案的詳細資訊 ls lh 把大小轉成具體的數值 新建資料夾 mkdir 新建檔案 touch 刪除檔案 rm 刪除資料夾 rm r 分屏顯示 more 重定向 覆蓋...

python筆記3高階特性

切片 閱讀 117822 取乙個list或tuple的部分元素是非常常見的操作。比如,乙個list如下 l michael sarah tracy bob jack 取前3個元素,應該怎麼做?笨辦法 l 0 l 1 l 2 michael sarah tracy 之所以是笨辦法是因為擴充套件一下,取...

Python3(高階特性)

1.例題答案 小寫化含有數字的list l2 s.lower for s in l1 if isinstance s,str true l2.insert key,value for key,value in enumerate l1 if isinstance value,int true l2注...