python面向过程学习笔记
python面向過程
類和對象
- 類 是對一群具有相同 特征 或者 行為的事物的一個統稱,是抽象的,不能直接使用
- 特征被稱為屬性
- 行為被稱為方法
- 對象是由類創建出來的一個具體存在,可以直接使用
- 由哪一個類創建出來的對象,就擁有在哪一個類中定義的屬性和方法
- 類是模板,對象是根據 類這個模板創建出來的,應該現有類,再有對象
- 類只有一個,而對象可以有很多個
- 不同對象之間的屬性可能會有不同
- 類中定義了什么屬性和方法,對象中就有什么屬性和方法,不可能多,也不可能少
- 類名:這類事物的名字,滿足大駝峰命名法
- 屬性:這類事物具有什么樣的特征
- 方法:這類事物具有什么樣的行為
面向對象基礎語法
dir內置函數
提示:__方法名__格式時python提供的內置方法/屬性
| 01 | __ new __ | 方法 | 創建對象時,會被自動調用,為對象分配空間 |
| 02 | __ int__ | 方法 | 對象被初始化時,會被自動調用 |
| 03 | __ del __ | 方法 | 對象被從內存中銷毀前,會被自動調用 |
| 04 | __ str __ | 方法 | 返回對象的描述信息,print函數輸出使用 |
定義簡單的類(只包含方法)
class 類名:def 方法1(self,參數列表):passdef 方法2(self,參數列表):pass創建對象
方法中的self參數
- 在類封裝的方法內部,self就表示當前調用方法的對象自己
- 在調用方法時,不需要傳遞self參數
- 在方法內部
- 也可以通過self,訪問對象的屬性
- 也可以通過self,調用其他的對象方法
初始化方法
之前的代碼存在的問題—在類的外部給對象增加屬性
- 在日常開發中,不推薦在類的外部給對象增加屬性
- 如果在運行時,沒有找到屬性,程序會報錯
- 對象應該包含由哪些屬性,應該封裝在類的內部
初始化方法
- 當使用類名()創建對象時,會自動執行以下操作:
- 為對象在內存中分配空間 — 創建對象
- 為對象的屬性設置初始值 — 初始化方法(init)
- 這個初始化方法就是__init__方法,__init__是對象的內置方法
- __init __方法是專門用來定義一個類具有哪些屬性的方法
在初始化方法內部定義屬性
- 在__init __方法內部使用self.屬性名 = 屬性的初始值就可以定義屬性
- 定義屬性后,再使用cat類創建的對象,都會擁有該屬性
改造初始化方法—初始化的同時設置初始值
- 在開發過程中,如果希望在創建對象的同時,就設置對象的屬性,可以對__init __方法進行改造
- 在方法內部使用self.屬性 = 形參接收外部傳遞的參數
- 在創建對象時,使用類名(屬性1,屬性2…)調用
內置方法和屬性
| __ del __ | 方法 | 對象被從內存中銷毀前,會被自動調用 |
| __str __ | 方法 | 返回對象的描述信息,print函數輸出使用 |
身份運算符
身份運算符用于比較兩個對象內存地址是否一致 — 是否是對同一個對象的引用
- 在python中針對none比較時,建議使用is判斷
| is | is是判斷兩個標識符是不是引用同一個對象 | x is y,類似id(x)==id(y) |
| is not | is not是判斷兩個標識符是不是引用不同對象 | x is not y,類似id(a) ≠id() |
is 與==區別:
is用于判斷兩個變量引用對象是否為同一個
==用于判斷引用變量的值是否相等
私有屬性和私有方法(在python中,并沒有真正意義上的私有)
繼承
- 子類可以擁有多個父類,并且具有所有父類的屬性和方法
- 如果父類之間存在同名的屬性或方法,應該盡量避免使用多繼承
繼承語法
class 類名(父類名):pass- 子類繼承自父類,可以直接享受父類中已經封裝好的方法,不需要再次開發
- 子類中應該根據職責,封裝子類特有的屬性和方法
c. 方法重寫
- 應用場景:當父類的方法實現不能滿足子類需求時,可以對方法進行重寫(override)
- 重回父類方法有兩種情況:
- 覆蓋父類的方法
- 直接在子類中定義一個和父類同名的方法并且實現
- 對父親方法進行擴展
- 在子類中重寫父類的方法
- 在需要的位置使用super().父類方法來調用父類方法的執行
- 代碼其他的位置針對子類的需求,編寫子類特有的代碼實現
- 覆蓋父類的方法
類方法和靜態方法
類方法
- 使用賦值語句在class關鍵字下方可以定義類屬性
- 類屬性用于記錄與這個類相關的特征
- 在類方法內部可以直接訪問類屬性或者調用其他的類方法
- 類方法需要修飾器@classmethod來標識,告訴解釋器這是個類方法
- 類方法的第一個參數應該是cls
- 由哪一個類調用的方法,方法內的cls就是哪一個類的引用
- 這個參數和實例方法的第一個參數是self類似
- 提示:使用其他名稱也可以 ,不過這是習慣
- 通過類名.調用類方法,調用方法時,不需要傳遞cls參數
- 在方法內部
- 也可以通過cls,訪問類的屬性
- 也可以通過cls,調用其他的類的方法
b. 靜態方法
使用條件:
- 既不需要訪問實例屬性或者調用實例方法
- 也不需要訪問類屬性或者調用類方法
總結:
- 實列方法—方法內部需要訪問實列屬性
- 實列方法 內部可以使用類名.訪問類屬性
- 類方法 — 方法內部只需要訪問類屬性
- 靜態方法—方法內部,不需要訪問實列屬性和類屬性
單例
單例設計模式
- 設計模式
- 設計模式是前人工作的總結和提煉,通常,被人們廣泛流傳的設計模式都是針對某一特定問題的成熟的解決方案
- 使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性
- 單例設計模式
- 目的—讓類創建的對象,在系統中只有唯一的一個實例
- 每一次執行類名()返回的對象,內存地址是相同的
- 應用場景
- 音樂播放對象
- 回收站對象
- 打印機對象
__ new__方法
- 使用類名()創建對象時,python解釋器首先會調用__new __方法為對象分配空間
- __new __是一個由object基類提供的內置的靜態方法,主要作用有兩個:
- 在內存中為對象分配空間
- 返回對象的引用
- python的解釋器獲得對象的引用后,將引用作為第一個參數,傳遞給__init __方法
重寫__ new__方法的代碼非常固定
- 重寫__new 方法一定要return super().__ new__(cls)
- 否則python的解釋器得不到分配了空間的對象引用,就不會調用對象的初始化方法
- 注意:__ new__是一個靜態方法,在調用是需要主動傳遞cls參數
異常
捕獲異常
簡單的捕獲異常語法
try:嘗試執行的代碼 except:出現錯誤的處理錯誤類型捕獲
try:#嘗試執行的代碼 except 錯誤類型1:#針對錯誤類型1,對應的代碼處理pass except (錯誤類型2,錯誤類型3):#針對錯誤類型2和3,對應的代碼處理pass except Exception as result:print("未知錯誤%s" %result )- 當python解釋器拋出異常時,最后一行錯誤信息的第一個單詞,就是錯誤類型
完整語法
try:#嘗試執行的代碼 except 錯誤類型1:#針對錯誤類型1,對應的代碼處理pass except (錯誤類型2,錯誤類型3):#針對錯誤類型2和3,對應的代碼處理pass except Exception as result:print("未知錯誤%s" %resykt ) else:#沒有異常會執行的代碼pass finally:#無論是否出現錯誤,都會執行的代碼pass異常的傳遞
在開發中,可以在主函數中增加異常捕獲,而在主函數中調用的其他函數,只要出現異常,都會傳遞到異常捕獲中,這樣就不需要在代碼中,增加大量的異常捕獲,能夠保證代碼的整潔
拋出raise異常
python中每一個模塊都有一個內置屬性__file__可以查看模塊的完整路徑
__ name__屬性:可以做到只在測試情況下被運行,而在被導入時不會執行
if __name__ = "__main__":包(package)
包是一個包含多個模塊的特殊目錄,目錄下有一個特殊的文件 __ init__.py。包名的命名方式和變量名一致,小寫字母+_
好處:使用import 包名 可以一次性導入包中所有模塊
__ init__.py要在外界使用包中的模塊,需要在__ init__.py中指定對外界提供的模塊列表
#從當前目錄導入模塊列表 from . import send_message制作發布壓縮包步驟
創建setup.py
from distutils.core import setup setup(name=''#包名version=''#版本description=''#描述信息long_description=''#完整描述信息author=''#作者author_email=''#作者郵箱url=''#主頁py_modules=[])構建模塊
c. 生成發布壓縮包
$python3 setup.py sdistd. 安裝模塊
c.卸載模塊:直接從安裝目錄下,把安裝模塊的目錄刪除就可以
文件
文件的概念和作用
文件的存儲方式:以二進制的方式保存在磁盤上
操作文件的函數/方法
| open | 打開文件,并且返回文件操作對象 |
| read | 將文件內容讀取到內存 |
| write | 將指定內容寫入文件 |
| close | 關閉文件 |
read方法—讀取文件
#1.打開-文件名需要注意大小寫 file = open('README') #2讀取 text = file.read #3.關閉 file.close()寫入文件
| r | 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。如果文件不存在,拋出異常 |
| w | 以只寫方式打開文件。如果文件存在會被覆蓋。如果文件不存在,創建新文件 |
| a | 以追加方式打開文件。如果該文件已存在,文件指針將會放在文件的結尾。如果文件不存在,創建新文件進行寫入 |
| r+ | 以讀寫方式打開文件。文件的指針將會放在文件的開頭。如果文件不存在,拋出異常 |
| w+ | 以讀寫方式打開文件。如果文件存在會被覆蓋。如果文件不存在,創建新文件。 |
| a+ | 以讀寫方式打開問價。如果該文件已存在,文件指針將會放在文件的結尾。如果文件不存在,創建新文件進行寫入。 |
iii. 按行讀取文件內容
readline方法:
- readline方法可以一次讀取一行內容
- 方法執行后,會把文件指針移動到下一行,準備再次讀取
iv. 文件/目錄的常用管理操作
文件操作
| rename | 重命名文件 | os.rename(源文件,目標文件名) |
| remove | 刪除文件 | os.remove(文件名) |
目錄操作
| listdir | 目錄列表 | os.listdir(目錄名) |
| mkdir | 創建目錄 | os.mkdir(目錄名) |
| rmdir | 刪除目錄 | os.rmdir(目錄名) |
| getcwd | 獲取當前目錄 | os.getcwd() |
| chdir | 修改工作目錄 | os.chdir(目標目錄) |
| path.isdir | 判斷是否是文件 | os.path.isdir(文件路徑) |
eval函數
eval函數十分強大—將字符串當成有效的表達式來求值并返回計算結果
#基本的數學計算 eval("1+1")2 #字符串重復計算 eval('*'*10)在開發時,千萬不要使用eval直接轉換input的結果
總結
以上是生活随笔為你收集整理的python面向过程学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 总结:G1收集器
- 下一篇: 基础会计学习笔记4 会计核算基本方法(会