1.初識面向對象 面向過程: 一切以事物的發展流程為中心 面向對象: 一切以對象為中心.一切皆為對象.具體的某一個事務就是對象 打比方: 大象進冰箱 步驟:第一步:開門, 第二步:裝大象,第三:關門 面向對象: 大象,進冰箱 , 此時主語是大象,我操縱的是大象,此時的大象就是對象 2.類,對象 類: ...
1.初識面向對象 面向過程: 一切以事物的發展流程為中心 面向對象: 一切以對象為中心.一切皆為對象.具體的某一個事務就是對象 打比方: 大象進冰箱 步驟:第一步:開門, 第二步:裝大象,第三:關門 面向對象: 大象,進冰箱 , 此時主語是大象,我操縱的是大象,此時的大象就是對象 2.類,對象 類: 就是圖紙. 創建對象的第一步.先畫圖紙.先寫類. 對象: 通過類創建對象, 列如:對象就是車,通過圖紙造出來的東西 類與對象的關係: 類是對xxx事務的歸類. 寫: __init__(self,參數) 參數一般作為屬性設置給對象.對象就是self,對徐行的封裝. def 方法(self,參數): 方法. 第一個參數一般是固定的self.當前類的對象. pass 對象是xx類型的一個具體 創建對象: 類名() 創建類: class 類名: def __init__(self): ##初始化方法.又被稱為構造方法 self.屬性 = 值 self.屬性 = 值 self.屬性 = 值 def fangfa(self): 方法體(函數體, return) 創建對象: 變數 = 類型() ###實例化 <->創建對象 變數.屬性 #訪問對象的屬性信息 變數.方法() ##訪問類中的方法 1. 創建⼀個武鬆. 武鬆可以打老虎, 殺嫂⼦, 替天⾏道 類就是對屬性和方法的封裝 class Person: # 屬性 def __init__(self, waihao, name, address): self.waihao = waihao self.name = name self.addre ss = address # 動作 def dalaohu(self): print('%s%s%s打老虎' % (self.waihao, self.name, self.address)) def shasaozi(self): print("這個人, 喜歡啥嫂子") def titianxingdao(self): print("替天行道") ws = Person("行者", "武鬆", "景陽縣") ws.dalaohu() ws.shasaozi() ws.titianxingdao() ⽤⾯向對象的思維來完成⽤戶登錄. # 用戶登錄的問題. 邏輯是活的 # # 我的版本: 把所有的邏輯都寫在類中 class User: def __init__(self, username, password): self.username = username self.password = password def login(self): uname = input("請輸入你的用戶名") upwd = input("請輸入你的密碼") if uname == self.username and upwd == self.password: print("登錄成功") else: print("登錄失敗") u = User("alex", "123") u.login() 3.面向對象和麵向過程的對比: 如果細一些比較小的程式用面向過程 程式很複雜,很龐大建議用面向對象 # 小豬佩奇. 使用嘴巴嘟嘟技能攻擊 超人 # 小豬佩奇. 使用嘴巴嘟嘟技能攻擊 蝙蝠俠 # 小豬佩奇. 使用嘴巴嘟嘟技能攻擊 蜘蛛俠 # 面向過程: 代碼非常的冗餘. 尤其是參數 def fight_superman(name, jineng): print("%s使用%s攻擊超人" % (name, jineng)) def fight_batman(name, jineng): print("%s使用%s攻擊蝙蝠俠" % (name, jineng)) def fight_spiderman(name, jineng): print("%s使用%s攻擊蜘蛛俠" % (name, jineng)) fight_superman('小豬佩奇', "嘴巴嘟嘟") fight_batman('小豬佩奇', "嘴巴嘟嘟") fight_spiderman('小豬佩奇', "嘴巴嘟嘟") #面向對象 class Pig: def __init__(self, name, jineng): self.name = name self.jineng = jineng def fight_superman(self): print("%s使用%s攻擊超人" % (self.name, self.jineng)) def fight_batman(self): print("%s使用%s攻擊蝙蝠俠" % (self.name, self.jineng)) def fight_spiderman(self): print("%s使用%s攻擊蜘蛛俠" % (self.name, self.jineng)) pg = Pig("小豬佩奇", "嘴巴嘟嘟") # 不需要向原來一樣傳遞一樣的參數了 # 面向對象的程式: 結果相對清晰. 缺點: 代碼量比原來大, 上手太難 pg.fight_batman() pg.fight_spiderman() pg.fight_superman() 4.面向對象的三大特征: 封裝, 繼承,多態 封裝: 1.對屬性的封裝(__init__), 2.對方法和功能的封裝 繼承: 子類自動擁有父類中除了私有內容外的其他所有內容 class Bar(fool): Bar對fool進行了擴展 pass 當出現x是一種y的時候. 推薦使用繼承關係 python支持多繼承. 查找順序: 先找理他近的 # 當出現xxx是一種yyy類型的東西. 可以使用繼承關係 # 貓是一種動物 class Animal: def dong(self): print("動物會動, 顧雍") class Cat(Animal): # 子類其實是對父類的一種擴展 def catchMouse(self): print("貓很皮, 抓老鼠") c = Cat() c.dong() c.catchMouse() # python支持多繼承 class Foo1: def getMoney(self): print('給你個大嘴巴子') def play(self): print("玩兒") class Foo2: def getMoney(self): print('給多點兒') class Bar(Foo1, Foo2): # 離當前類最近的是親爹, 後面的是乾爹. pass b = Bar() # 就近原則, MRO的C3演算法 多態(python原生直接就是多態) python更多的之臣的是鴨子模型,只要會嘎嘎叫就是好鴨子