使用 類名() 建立物件時,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注...