python基礎之小知識點(1)
阿新 • • 發佈:2018-12-13
學習過程隨意記錄的小知識點
一、基礎篇 1.在Python中,在函式內部針對引數 賦值 不會影響外部引數 2.在Python中,在函式內部使用 方法 修改可變引數會影響外部引數 3.在列表中使用 = (等號),本質上是呼叫 extend 方法 預設引數: 1.指定函式的預設引數---》 在引數後使用 賦值 語句,可以指定引數的預設值 必須保證 帶有預設值得預設引數 在引數列表末尾 2.帶有多個預設引數的函式: 在呼叫函式時,如果有多個預設引數,需要指定引數名,這樣直譯器才能夠知道引數的對應關係(參考sort方法) 3.多值引數: 3.1 函式要處理的引數不確定是 ,使用多值引數 3.2 兩種: 3.2.1 引數名前增加一個 * 可以接收 元組 3.2.2 引數名前增加兩個 * 可以接收 字典 3.3 預設多值引數名: 元組: *args 列表: *kwargs 4.元組和字典的拆包: 在呼叫帶有多值引數的函式時,如果希望: 將元組變數,直接傳遞給 args 將字典變數,直接傳遞給 kwargs 就可以使用拆包,簡化引數的傳遞,方法: 在元組變數前,增加;一個 * 在字典變數前,增加;兩個 * 二、面向物件篇 1.類是模板,物件是根據 類 這個模板創建出來的,應該先有類,再有物件 2.類中定義了什麼屬性和方法,物件中就有什麼屬性和方法,不可能多,也不可以少 3.利用好 dir() 這個函式,可以檢視 型別或資料含有的 方法 4.在類中定義函式時,第一個引數必須是 self 在類封裝的方法 內部,self就表示當前呼叫方法的物件自己 哪一個物件呼叫的方法,self就是哪一個物件的引用,及self是引用這個物件的記憶體地址,self引用的地址和這個物件的地址是一樣的 使用self:只需在self後面加上 .屬性名(行為名) 即可 5.給物件增加屬性: 不推薦,因為:物件屬性的封裝應該封裝在類的內部 只需要在 類的外部的程式碼 中直接通過 .屬性名 設定一個屬性即可 使用這種方法新增的屬性,並不能給 類 新增屬性,只能給當前這個物件新增屬性 6.在初始化方法內部定義屬性:----簡化物件的建立 作用:1.為物件在記憶體中分配空間---建立物件 2.為 物件 的屬性 設定初始值---初始化方法(__init__ ) 在__init__ 方法內部使用 self.屬性名 = 屬性的初始值 就可以定義屬性 定義屬性之後,在使用 xx類 建立的物件,都會擁有該屬性 對初始化方法的改造:初始化的同事設定初始值: __init__ 方法中定義要增加形參(引數) 在__init__ 方法內部使用 self.屬性 = 形參 接收外部傳遞的引數 在建立物件時,使用 類名(屬性1,屬性2...) 呼叫 7. __del__ 和 __str__ 方法 8.私有方法:只能在物件的內部被使用,而不在外邊被訪問到 私有屬性和方法,都不允許在外界直接訪問 連 print(物件.屬性或方法) 都不行,報錯 9.沒有整整真正意義的私有: 不推薦,因為既然是私有的了,那就要保證私有的隱私性 方式:在 名稱 前面加上 _類名 ==》 _類名__名稱 三、繼承篇 面向物件三大特性: 1.【封裝】 根據職責將 屬性 和 方法 封裝到一個抽象的類中 2.【繼承】 實現程式碼的重用,相同的程式碼不再需要重寫 3.【多型】 不同的物件呼叫相同的方法,產生不同的執行結果,增加程式碼的靈活度 (1)、單繼承 1.繼承的概念、語法和特點 1.1 概念:子類擁有父類的所有方法和屬性 1.2 語法: class 類名(父類名): pass · 子類 繼承自父類,可以直接享受父類中已經封裝好的方法,不需要再次開發 · 子類中應該根據職責,封裝子類特有的屬性和方法 1.3 專業術語 · xx類是xx類的子類, xx類是xx類的父類, xx類從xx類繼承 · xx類是xx類的派生類, xx類是xx類的基類, xx類從xx類派生 1.4 繼承的傳遞性: · C類從B類繼承,B類又從A類繼承 · 那麼C 了就具有B類和A類的所有屬性和方法 " 子類擁有父類以及父類的父類的所有屬性和方法 " 2.方法的重寫 (父類的方法不能滿足子類的需求,這就要對方法進行重寫了) 重寫父類方法的兩種情況: 1.覆蓋父類的方法 2.對父類方法進行擴充套件 1.1 覆蓋父類的方法: ·父類的方法實現和子類的方法實現完全不同,就可用覆蓋方法,在子類中重新編寫父類的方法實現(就相當於在子類中定義了 一個和父類同名的方法並且實現) ·覆蓋之後,執行程式時,只會呼叫子類中重寫的方法,不會再呼叫父類中封裝的方法了 2.1 擴充套件: ·(場景)子類的方法實現中包含父類對的方法實現(父類原本封裝的方法實現是子類方法的一部分) ·方法: 在子類中重寫父類的方法 在需要的位置使用 super().父類方法 來呼叫父類方法的執行 程式碼其他的位置針對之類的需要,編寫子類特有的程式碼實現 ·程式碼實現:: class Dog: def fly(self): print("我會飛:) class Xiaohei(Gog): def fly(self): print("我飛的很快:) super().fly() 3.父類的私有屬性是方法: ·子類物件不能在自己的方法內部,直接訪問父類的私有屬性和方法 ·子類物件可以通過父類的 公共方法 間接訪問到私有屬性和私有方法 私有屬性、方法是物件的隱私,不對外公開,外界及子類不能直接訪問 私有屬性、方法通常用於做一下內部的事情 (2)、多繼承 1.概念: ·子類可以擁有多個父類,並且具有所有父類的屬性和方法 例如:孩子會繼承自己父親和母親的特徵 2.語法: class 子類名(父類名1, 父類名2.。。): pass 3.如果父類之間存在相同名字的屬性或者方法,就應該避免使用多繼承 4.內建方法: __mro__ MRO 是 method resolution order, 主要有於 在 多繼承時判斷 方法、屬性的呼叫路徑(順序) 使用: print(類名.__mro__) 四、多型篇 ----不同的 子類物件 呼叫相同的父類方法,產生不同的執行結果 ·多型可以增加程式碼的靈活度 ·以繼承和重寫父類方法為前提 ·是呼叫方法的技巧,不會影響到類的內部設計 五、類物件 ---類是一個特殊的物件 在python中,一切都是物件 · class AAA: 定義的類屬於 類物件 · obj1 = AAA() 屬於例項物件 在程式執行時,類同樣會被載入到記憶體 在python中,類是一個特殊的物件 --- 類物件 在程式執行時,類物件在記憶體中只有一份,使用一個類可以建立很多個物件例項 除了封裝例項的屬性和方法外,類物件還可以擁有自己的屬性和方法 ·類屬性 ·類方法 通過 類名. 的方式可以訪問類的屬性 或者 呼叫類的方法 (1)、類屬性 1.概念和使用 ·類屬性 就是給 類物件 中定義的屬性 ·通常用來記錄與這個類相關的特徵 · 類屬性 不會用於記錄 具體物件的特徵 使用 = 賦值語句在 class 關鍵字下方可以定義 類屬性 類名.類屬性 --- 訪問方法 (2)、類方法 · 類方法 就是針對 類物件 定義的方法 在類方法內部可以直接訪問類屬性或者呼叫其他的類方法 ·語法: @classmethod def 類方法名(cls): pass `類方法需要用 修飾器 @classmethod 來表識,告訴直譯器這是一個類方法 ·類方法的第一個引數應該是 cls 由哪一個類呼叫的方法,方法內部的 cls 就是那一個類的引用 這個引數和例項方法的第一個引數self類似 提示使用其他名稱也可以,不過習慣使用 cls ·通過 類名. 呼叫類方法,呼叫方法時,不需要傳遞 cls 引數 ·在方法內部: 可以通過 cls. 訪問類的 屬性 也可以通過 cls. 呼叫其他的類方法 六、靜態方法 如果需要在類中封裝一個方法,且這個方法: 既不需要訪問例項屬性或者例項方法 也不需要訪問類屬性或者類方法 這個時候,就可以把這個方法封裝成一個靜態方法 語法: @staticmethod def 靜態方法名(): # 不需要引數 print("小鳥要飛") 靜態方法需要使用 @staticmethod 修飾器來表識,告訴直譯器這是一個靜態方法 通過 類名. 呼叫靜態方法 七、 __new__ 方法