1. 程式人生 > >python記錄_day15 面向物件初始

python記錄_day15 面向物件初始

一、面向過程和麵向物件

1、面向過程

以我為中心,做一件事先幹什麼,在幹什麼,後幹什麼,有一套清楚完整的流程。核心是“過程”。

優點:將要解決的問題流程化, 編寫相對簡單

缺點:可擴充套件性差

2、面向物件

以物件為中心,做一件事不需要你清楚怎麼做,你建立能做這件事的物件即可。物件是具體的事物,它能實現一定的功能。

優點:可擴充套件性強

缺點:程式設計的複雜度高於面向過程

 

二、面向物件如何編寫

在現實世界中,是先有物件,然後後歸類;在程式碼中,是先定義類,然後再建立物件

#定義類 格式:

class 類名:

  def  __init__(self,引數):     #這是類的構造方法

,在建立物件的時候會自動執行;self指當前正在建立的物件,由python自動傳值

    pass

  def  方法名(self,引數):     #類中自定義的方法

    pass

#建立物件:

變數 = 類名(引數)

# 訪問物件的屬性資訊
物件.屬性
# 方法的訪問:
物件.方法()

 1 #定義computer類
 2 class Computer:
 3     def __init__(self,pinpai,cpu):
 4         self.pinpai = pinpai
 5         self.cpu = cpu
6 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又變成了字串型別。