python 初識物件導向

沐小熊發表於2018-12-27

1. 初識物件導向
程式導向:
一切以事務的發展流程為中心.
物件導向:
一切以物件為中心. 一切皆為物件. 具體的某一個事務就是物件

打比方:
大象進冰箱
步驟: 第一步, 開門, 第二步, 裝大象, 第三步, 關門

物件導向:大象, 你進冰箱.
此時主語是大象. 我操縱的是大象. 此時的大象就是物件

 1 class Car:  # 類名首字母大寫,嚴格蹲守駝峰命名規則
 2     pass
 3 
 4 
 5 # 造車
 6 c = Car()  # 類名()  # 建立物件
 7 
 8 #  出廠之後進行改裝
 9 c.color = `紅顏色`  # 物件.屬性    點:的  當屬性不存在的時候, 新增一個屬性
10 c.pai = `京A8888`  # 物件.屬性
11 c.pailiang = `555L`  # 排量
12 
13 print(c.color)  # 此車是紅顏色
14 print(c.pai)
15 print(c.pailiang)
16 
17 c.color = `綠顏色`  # 當屬性存在的時候是修改屬性資訊
18 # 物件.屬性 =xxx 設定屬性資訊
19 print(c.color)

2. 類. 物件
類: 就是圖紙. 建立物件的第一步. 先畫圖紙. 先寫類.
物件: 物件就是車. 通過圖紙造出來的具體的東西. 通過類來建立物件

類與物件的關係:
類是對xxx事物的歸類.
寫:
__init__(self, 引數) 引數一般作為屬性設定給物件. 物件就是self, 對屬性的封裝.

def 方法(self, 引數): 方法. 第一個引數一般是固定的self. 當前類的物件.
pass

物件是xx型別的一個具體
建立物件: 類名()

建立類:
class 類名:

def __init__(self): # 初始化方法. 又被成為構造方法
self.屬性 = 值
self.屬性 = 值
self.屬性 = 值

def fangfa(self):
方法體(函式體, return)

建立物件:
變數 = 類名() # 例項化 <-> 建立物件

變數.屬性 # 訪問物件的屬性資訊
變數.方法() # 訪問類中的方法

 1 1.
 2 class Car:  # 類名首字母大寫,嚴格蹲守駝峰命名規則
 3     # __init__方法是一個特殊的方法. 初始化方法. (構造方法)
 4     # 在建立物件的時候會自動的呼叫__init__()
 5     # self就是你建立出來的那個物件
 6     def __init__(self):  # init初識方法. 在建立物件的時候. 預設執行這個函式
 7         print(`我是init`)
 8         print(`self=`, self)
 9 
10 
11 c = Car()  # 建立Car型別物件. 此時self引數不需要我們管
12 print(`c=`, c)
13 
14 2.
15 class Car:  # 類名首字母大寫,嚴格蹲守駝峰命名規則
16     def __init__(self, color, pai, pailiang):  # init初識方法. 在建立物件的時候. 預設執行這個函式
17         # self.color = `紅色` # 在出廠的時候都是紅色 靜態的
18         self.color = color  # 動態獲取 第一個color是設定 第二個color是獲取的引數
19         self.pai = pai
20         self.pailiang = pailiang
21 
22     # 跑: 動作, 功能 -> 函式
23     # 在類中寫的函式-> 方法
24     # self 當前類的物件
25     def pao(self):  # self是自動傳遞的. 不用管它
26         print(`%s我的車能跑` % self.color)  #self.color
27     def jump(self):
28         print(`you jump, I jump`)
29 #
30 #
31 #
32 #
33 c = Car(`紅色`, `京A8888`, `555L`)  # 建立Car型別物件. 此時self引數不需要我們管
34 c2 = Car(`藍色`, `京B6666`, `1.6T`)
35 print(c.color)
36 print(c2.color)
37 #
38 #
39 c.pao()
40 c2.pao()
41 c.jump()

3. 物件導向和麵向過程的對比
如果寫一些比較小的程式用程式導向.
程式很複雜. 很龐大建議用物件導向.

4. 物件導向的三大特徵
封裝:
1. 對屬性的封裝(__init__())
self.xxx = xxx
2. 對方法和功能的封裝

繼承
子類自動擁有父類中除了私有內容外的其他所有內容
class Bar(Foo): Bar對Foo進行了擴充套件
pass

當出現x是一種y的時候. 推薦使用繼承關係
python支援多繼承. 查詢順序: 先找離他近的.

1 class Foo:
2     def getMoney(self):
3         print(`拿錢`)
4 
5 class Bar(Foo):
6     pass
7 
8 b = Bar()
9 b.getMoney()  # 此時呼叫的是父類中的方法

 

多型(python原生直接就是多型)
python更多的支援的是鴨子模型, 只要會嘎嘎叫就是好鴨子

 1 多型性: 用一個物件. 多種形態
 2 python 支援的是鴨子型別. 會嘎嘎叫的東西就是鴨子
 3 為了程式能夠正常執行. 本來需要傳遞進來一隻鴨子. 但是我只需要傳遞一個會嘎嘎叫的東西就可以了
 4 def func(yazi):
 5     yazi.gagajiao()
 6 
 7 class Animal:
 8     def chi(self):
 9         print("會吃")
10 
11 class GoldenMonkey(Animal):
12     def chi(self):
13         print("用手拿著吃, 五花八門")
14 
15 class Tiger(Animal):
16     def chi(self):
17         print("老虎吃肉")
18 
19 class Elephant(Animal):
20     def chi(self):
21         print("大象吃香蕉")
22 
23 class QiE(Animal):
24     def chi(self):
25         print("企鵝吃人民幣")
26 
27 # 以下程式碼是飼養員
28 # 優點: 超強的可擴充套件行. 物件導向的核心就是多型
29 def wei_animal(ani):  # 傳進來的東西要會吃的就行
30     ani.chi()
31 
32 # 動物園
33 t = Tiger()
34 m = GoldenMonkey()
35 e = Elephant()
36 
37 wei_animal(t)
38 wei_animal(m)
39 wei_animal(e)
40 
41 a = 188
42 def cul(n):  # python中萬事萬物都是物件, object(物件)
43     print(n)
44 
45 cul(a)
46 cul(`哈哈`)

 

相關文章