【Python】筆記第四部分
全系列導航見:Python教程整理
🌟概述
⭐️面向過程
- 定義:分析出解決問題的步驟,然後逐漸實作。
- 公式:程式 = 算法 + 資料結構
- 優點:所有環節、細節自己掌控。
- 缺點:考慮所有細節,工作量大。
⭐️面向對象
- 定義:找出解決問題的人,然後配置設定職責。
- 公式:程式 = 對象 + 互動
- 優點
- 思想層面:
- 可模拟現實情景,更接近于人類思維。
- 有利于梳理歸納、分析解決問題。
- 技術層面:
- 高複用:對重複的代碼進行封裝,提高開發效率。
- 高擴充:增加新的功能,不修改以前的代碼。
- 高維護:代碼可讀性好,邏輯清晰,結構規整。
- 思想層面:
- 缺點:學習曲線陡峭。
🌟類和對象
- 類:一個抽象的概念,即生活中的”類别”。
- 資料成員:名詞類型的狀态。
- 方法成員:動詞類型的行為。
- 對象:類的具體執行個體,即歸屬于某個類别的”個體”。
- 類是建立對象的”模闆”。
- 類與類行為不同,對象與對象資料不同。
⭐️文法
✨定義類
class 類名:
"""
文檔說明
"""
def __init__(self,參數):
self.執行個體變量 = 參數
方法成員
複制
- 類名所有單詞首字母大寫。
-
也叫構造函數,建立對象時被調用,也可以省略。__init__
-
變量綁定的是被建立的對象,名稱可以随意,一般使用self
。self
✨執行個體化對象
變量 = 類名(參數)
複制
- 變量存儲的是執行個體化後的對象位址。
- 類名後面的參數按照構造函數的形參傳遞。
⭐️執行個體成員
✨執行個體變量
表示不同個體的不同資訊。
定義:對象.變量名
調用:對象.變量名
複制
- 首次通過對象指派為建立,再次指派為修改。
- 通常在構造函數
中建立。__init__
- 每個對象存儲一份,通過對象位址通路。
- 作用:描述某個對象的資料。
-
:對象的屬性,用于存儲自身執行個體變量的字典。因為這個,python允許在類外建立執行個體變量,叫做python的動态。__dict__
class AClass:
pass
AClass.a = 2
print(AClass.a) # 2
複制
注意:上面這種寫法知道就行,商業項目中幾乎不會用到。
✨執行個體方法
操作執行個體的變量,表達個體的行為。
# 定義
def 方法名稱(self, 參數):
方法體
複制
- 至少有一個形參,第一個參數綁定調用這個方法的對象,一般命名為
。self
- 無論建立多少對象,記憶體中的方法隻有一份,并且被所有對象共享。
# 調用
對象.方法名稱(參數)
複制
- 不建議通過類名通路執行個體方法,類名要通路類方法。
- 作用:表示對象行為。
- 隻有操作對象性質的行為才要定義在内部。
✨跨類調用
# 寫法1:直接建立對象
# 語義:老張每次建立一輛新車去
class Person:
def __init__(self, name=""):
self.name = name
def go_to(self,position):
print("去",position)
car = Car()
car.run()
class Car:
def run(self):
print("跑喽~")
lz = Person("老張")
lz.go_to("東北")
複制
# 寫法2:在構造函數中建立對象
# 語義:老張開自己的車去
class Person:
def __init__(self, name=""):
self.name = name
self.car = Car()
def go_to(self,position):
print("去",position)
self.car.run()
class Car:
def run(self):
print("跑喽~")
lz = Person("老張")
lz.go_to("東北")
複制
# 方式3:通過參數傳遞
# 語義:老張用交通工具去
class Person:
def __init__(self, name=""):
self.name = name
def go_to(self,vehicle,position):
print("去",position)
vehicle.run()
class Car:
def run(self):
print("跑喽~")
lz = Person("老張")
benz = Car()
lz.go_to(benz,"東北")
複制
⭐️類成員
✨類變量
描述所有對象的共有的資料。
- 随類的加載而加載
- 存在優先于對象
- 隻有一份,被所有對象共享。
- 定義:在類中,方法外。
# 定義
class 類名:
變量名 = 資料
複制
# 調用
類名.變量名
# 不建議通過對象通路類變量,對象要通路的是執行個體變量。
複制
✨類方法
用來操作類變量。
- 至少有一個形參,第一個形參用于綁定類,一般命名為’cls’。
- 使用@classmethod修飾的目的是調用類方法時可以隐式傳遞類,也就是自動傳遞類。
- 類方法中不能通路執行個體成員,執行個體方法中可以通路類成員。
# 定義
@classmethod
def 方法名稱(cls,參數):
方法體
複制
# 調用
類名.方法名(參數)
# 不建議通過對象通路類方法
複制
⭐️靜态方法
- 靜态方法不能通路執行個體成員和類成員
- 使用@ staticmethod修飾的目的是該方法不需要隐式傳參數。
- 作用:定義常用的工具函數。
@staticmethod
def 方法名稱(參數): # 這裡沒有
方法體
複制
類名.方法名稱(參數)
# 不建議通過對象通路靜态方法
複制
🌟軟體架構
⭐️MVC架構
識别對象:界面視圖類 View,邏輯控制類 Controller,資料模型類 Model。命名的時候就用 xxxView,xxxController,xxxModel 就行。
V把一大堆輸入裝在M裡,去找C。
C把一大堆資料裝在M裡,去找V。
建立的系統中的 C 會賦予用 M 包好的資料一個
全球唯一辨別符
,一般就是
id
。
View 類的構造函數中執行個體化一個 Controller,意義是這個 View 的 Controller。
⭐️軟體封裝
軟體封裝後可以更容易使用,把便利留給他人,把麻煩留給自己。
- 封裝對象,把面向過程的代碼
- 封裝資料模型,添加
對象。Model
- 封裝内部變量,使用
的格式。__name
- 封裝對象程式,建立
函數,定義了類的使用流程。main
入口代碼要盡量簡潔,啟動代碼最好就兩行,直接調用
main
。
⭐️補充
編碼時調用父,運作是執行子。說白了就是根據父的規範編碼,然後規範好的子同樣可以運作在這裡。