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(`哈哈`)