python記錄_day15 面向物件初始
一、面向過程和麵向物件
1、面向過程
以我為中心,做一件事先幹什麼,在幹什麼,後幹什麼,有一套清楚完整的流程。核心是“過程”。
優點:將要解決的問題流程化, 編寫相對簡單
缺點:可擴充套件性差
2、面向物件
以物件為中心,做一件事不需要你清楚怎麼做,你建立能做這件事的物件即可。物件是具體的事物,它能實現一定的功能。
優點:可擴充套件性強
缺點:程式設計的複雜度高於面向過程
二、面向物件如何編寫
在現實世界中,是先有物件,然後後歸類;在程式碼中,是先定義類,然後再建立物件
#定義類 格式:
class 類名:
def __init__(self,引數): #這是類的構造方法
pass
def 方法名(self,引數): #類中自定義的方法
pass
#建立物件:
變數 = 類名(引數)
# 訪問物件的屬性資訊
物件.屬性
# 方法的訪問:
物件.方法()
1 #定義computer類 2 class Computer: 3 def __init__(self,pinpai,cpu): 4 self.pinpai = pinpai 5 self.cpu = cpu6 7 def playgame(self,game): 8 print("使用%s電腦打%s遊戲" % (self.pinpai, game)) 9 #建立具體物件c 10 c = Computer("lenovo", "A8") 11 print(c.pinpai) 12 c.playgame("lol") 13 14 #建立物件c2 15 c2 = Computer("xiaomi", "i7") 16 print(c2.pinpai) 17 c2.playgame("吃雞")
!!!注意:
對類與物件關係的理解: 類通過例項化建立一個物件,每個物件都是獨立的。
點 . 可以理解為“的”,或者“呼叫” 比如 c.pinpai 就是物件c的品牌;c.playgame() 物件c呼叫playgame方法
三、面向物件和麵向過程大PK
那麼面向物件和麵向過程到底哪個好?
具體問題,具體分析。 沒有絕對的好和不好。 這點 要格外注意。
對於大型專案,更適合用面向物件;對於小型指令碼,更適合用面向過程
四、面向物件三大特徵
(一)封裝
封裝是一個很寬泛的概念,你寫一個函式,可以稱為封裝,物件,打包成模組也都屬於封裝的思想。
在面向物件思想中,把一些看似無關緊要的內容組合到一起統一進行儲存和使用,這就是封裝。
對屬性封裝
self.xxx = xxxx
對方法封裝
def 方法名():
pass
(二)繼承
繼承格式
class 子類名(父類1,父類2):
pass
子類可以自動擁有父類中除了私有內容外的其他所有內容
(三)多型
同一個物件多種形態
1 class Animal: 2 def chi(self): 3 print("動物就知道吃") 4 class Pig(Animal): 5 def chi(self): 6 print("豬在吃") 7 class Haski(Animal): 8 def chi(self): 9 print("哈士奇在吃") 10 class Alasika(Animal): 11 def chi(self): 12 print("阿拉斯加在吃") 13 14 class SiYangYuan: 15 def yanng_animal(self, ani): #本來這裡的引數要的是Animal類的物件,但是傳入Pig類,Haski類,Alasika類的物件也可以,這就是多型 16 ani.chi() 17 18 zhu = Pig() 19 erha = Haski() 20 ala = Alasika() 21 alex = SiYangYuan() 22 alex.yanng_animal(zhu) 23 alex.yanng_animal(erha) 24 alex.yanng_animal(ala)
多型的好處:
程式具有超高的可擴充套件性。
面向物件思想的核心與靈魂。
python自帶多型,我們一直在用多型,但是感覺並不明顯。 比如. 我們建立一個變數a = 10 , 我們知道此時a是整數型別。但是我們可以通過程式讓a = "alex", 這時, a又變成了字串型別。