1. 物件導向
1.1物件導向概念
物件導向是一種程式設計思想,是對現實世界中的事物進行抽象的方式。應用到程式碼程式設計設計中,是一種建立現實世界事物模型的方式。
1.2 物件導向和麵向過程區別
程式導向關注的是完成工作的步驟,物件導向關注的是誰能完成工作。物件導向是在完成工作的時候關注哪些個體能夠完成對應的工作,找到對應的個體即可完成對應任務。
2. 類
2.1類的概念
類是一系列事物的統稱,同類事物必定具有相同的特徵。日常事物的特徵根據特性分為狀態和行為,對應到類中是變數和方法。
特徵分類:
狀態 變數(成員變數)、行為 方法(成員方法)。
統稱:類的成員
2.2類定義語法格式
class 類名:
pass 複製程式碼
說明:pass是空語句,不具有任何意義,僅為了保持程式結構完整性
2.3類名的命名規則
類名命名規範:滿足大駝峰命名規則
3. 物件
3.1物件的概念
物件是類的具體表現形式,是實際存在的個體。(類是一系列事物的統稱)
3.2建立物件語法格式
物件名 = 類名() 複製程式碼
3.3 注意事項
物件的建立不限制數量,一個類可以建立任意個數的物件。
4. 成員變數
4.1成員變數的概念
成員變數用於描述物件的固有狀態或屬性。
4.2定義成員變數語法格式(公有屬性/公有變數)
class 類名:
def __init__(self):
self.變數名1 = 值1
self.變數名2 = None複製程式碼
"""
案例:建立一個鋼筆類(Pen),
並建立物件屬性1:顏色color(None)
屬性2:價格price(1.5)ice)
"""
class Pen:
def __init__(self):
self.color = None
self.price = 1.5pen = Pen()複製程式碼
4.3成員變數定義語法格式(獨有屬性/獨有變數)
物件名.變數名 = 值 複製程式碼
4.4公有變數與獨有變數的區別
公有變數在
__init__
方法中宣告,每個物件都具有該變數
獨有變數在建立物件後宣告,只有當前物件具有此變數
定義物件的獨有變數時,如果獨有變數名與公有變數名相同,視為修改公有變數的值;如果獨有變數名與公有變數名不相同,視為定義新的獨有屬性
None含義是為空,表示沒有具體的資料
4.5變數的呼叫格式
取值:物件名.變數名賦值:物件名.變數名 = 值複製程式碼
5.成員方法
5.1成員方法概念
成員方法用於描述物件的固有行為。
5.2定義成員方法語法格式
格式一(無參方法):
class 類名: def 方法名(self): 方法體複製程式碼
格式二(有參方法)
class 類名: def 方法名(self,形參1,形參2,…): 方法體 複製程式碼
5.3 呼叫成員方法語法格式
格式一(呼叫無參方法):
物件名.方法名()複製程式碼
格式二(呼叫有參方法):
物件名.方法名(實參1,實參2,…) 複製程式碼
6. __init__方法
6.1__init__方法的作用
__init__
方法,也稱為構造方法,建立物件時為物件初始化成員變數。
6.2定義__init__方法語法格式
格式一:def __init__(self): self.變數名1 = 值1複製程式碼
格式二:
def __init__(self,形參1,形參2,…):
self.__屬性名1 = 形參1
self.__屬性名2 = 形參2 複製程式碼
6.3__init__方法呼叫和執行
__init__
方法在建立物件時被執行,無需手工呼叫即可執行
__init__
方法中如果有形參,在建立物件時需要傳遞對應的實參
6.4魔術方法
魔術方法是在類中宣告、定義的方法,執行時無需手工呼叫,自動執行。
7. __str__方法
7.1__str__方法的作用
__str__
方法是在使用print
函式列印輸出物件到螢幕時被呼叫的方法,用於返回物件的規範化字串表現形式
7.2定義__str__方法語法格式
def __str__(self): return 列印物件是顯示的資訊 複製程式碼
8. 成員方法呼叫類成員
8.1成員方法中呼叫成員變數語法格式
self.變數名 複製程式碼
8.2成員方法中呼叫成員方法語法格式
self.方法名(實參1,實參2,…) 複製程式碼
8.3 self
self僅出現在成員方法中,指代執行該方法的物件。
9.封裝
9.1封裝的作用
封裝操作可以對受訪問保護的成員進行功能開放的控制,達到保護資料不被非法訪問的目的。
9.2定義私有變數語法格式
self.__屬性名 = 值
9.3定義私有方法語法格式
def __方法名(self,形參1,形參2,…): 方法體 複製程式碼
9.4 標準封裝語法格式
# 變數私有化格式:
self.__屬性名 = 值
# 提供公共的訪問器格式:
def get_屬性名(self):
return self.__屬性名
# 提供公共的修改器格式:
def set_屬性名(self,屬性名):
self.__屬性名 = 屬性名 複製程式碼
10.類變數
10.1類變數的概念
類變數是定義在類中,不屬於某個具體物件的特徵,被所有物件共同使用的特徵。
10.2定義類變數語法格式
class 類名:
變數名 = 值複製程式碼
10.3呼叫類變數語法格式
# 賦值格式:
類名.類變數名 = 值
# 取值格式:
類名.類變數名(推薦) 物件名.類變數名(不推薦)複製程式碼
10.4注意事項
類變數推薦使用類名取值訪問,也可以使用物件名取值訪問
類變數只能通過類名修改;使用物件名呼叫類變數修改類變數的值時會建立新的物件獨有變數;如果此時物件具有同名物件變數,則修改對應的變數值
類變數可以私有化
10.5 使用場景
場景一:定義此類所建立的所有物件共有的屬性:
場景二:建立一個計數器,每次建立物件時對其計數加一,獲取最終建立物件的數量。
場景三:建立一個共有屬性,所有物件共同操控該屬性。複製程式碼
11.類方法
11.1類方法的概念
類方法是定義在類中,不屬於某個具體物件的行為,被所有物件共同使用的行為
11.2定義類方法基本語法
class 類名:
@classmethod
def 方法名(cls, 形參1,形參2,…):
方法體 複製程式碼
11.3呼叫類方法語法格式
類名.類方法名(實參1,實參2,…) (推薦)
物件名.類方法名(實參1,實參2,…) (不推薦)
11.4注意事項
類方法中不允許使用例項變數和例項方法
類方法中允許使用類變數和類方法,通過第一個引數cls進行
例項方法中允許使用類變數和類方法
12.靜態方法
12.1定義靜態方法語法格式
class 類名:
@staticmethod
def 方法名**(**形參1,形參2,…):
方法體 複製程式碼
12.2呼叫靜態方法語法格式
類名.靜態方法名(實參1,實參2,…) (推薦)
物件名.靜態方法名(實參1,實參2,…) (不推薦)
12.3各種方法定義規則
只訪問成員變數的方法,定義成例項方法
只訪問類變數的方法,定義類方法
既訪問成員變數,也訪問類變數的方法,定義成例項方法
既不訪問成員變數,也不訪問類變數,定義成靜態方法
案例:手機充電場景
"""
演示手機充電的案例要求:
手機耗電操作前要先判定電量是否足夠完成此項任務
手機充電操作不能充電超過最大值
"""
class Phone:
def __init__(self):
self.power = 100
def game(self):
"""打遊戲操作,耗電10"""
# 判定當前電量是否能夠完成打遊戲的要求
if self.power >= 10:# 正常執行,減少電量
print("正在打遊戲,耗電10")
self.power = self.power - 10
else:# 不能正常執行,不減少電量
print("當前電量不足以完成打遊戲的操作,打遊戲操作被終止")
def music(self):
if self.power >= 5:# 正常執行,減少電量
print("正在聽歌,耗電5")
self.power -= 5
else:# 不能正常執行,不減少電量
print("當前電量不足以完成聽歌的操作,聽歌操作被終止")
def call(self):
if self.power >= 4:# 正常執行,減少電量
print("正在打電話,耗電4")
self.power -= 4
else:# 不能正常執行,不減少電量
print("當前電量不足以完成打電話的操作,打電話操作被終止")
def answer(self):
if self.power >= 3:# 正常執行,減少電量
print("正在接電話,耗電3")
self.power -= 3
else:# 不能正常執行,不減少電量
print("當前電量不足以完成接電話的操作,接電話操作被終止")
def charge(self,num):# 判斷當前電量,再與充電量做比較,根據情況執行不同的內容
if self.power + num > 100:# 過沖
print("充電操作提前結束,當前電量為:100")
self.power = 100
else:# 正常衝
print("正在充電,衝電量是%d" % num)
self.power += num def __str__(self):
return "當前手機電量為:%d" % self.power
# 建立一部電話,當前電量是100
p = Phone()
# 執行耗電操作
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
print(p)
p.game()
p.charge(40)
print(p)
p.game()
print(p)
p.charge(80)
print(p)複製程式碼