一、面向對象和麪向過程
面向過程:核心過程二字,過程即解決問題的步驟,就是先幹什麼後幹什麼 基於該思想寫程序就比如在這是一條流水線,是一種機械式的思惟方式 優勢:複雜的過程流程化 缺點:擴展性差 面向對象:核心是對象二字,對象指特徵與技能的結合體 基於該思想編寫程序就比如在創造一個世界,世界是由一個個對象組成,是一種‘上帝式’的思惟方式 優勢:可擴展性強 缺點:變成複雜度高,極容易出現過分設計的問題 2、類 對象是特徵與技能的結合體,類就是一系列對象類似的特徵與技能的結合體 在現實生活中:必定是先有一個個具體的對象,後總結出類 在程序中:必定是先定義類,後產生對象
封裝介紹:編程
1.封裝是面相對性一大特色 2.面向對象編程的第一步--將屬性和方法封裝到一個抽象的類當中 3.外界使用類建立對象,而後讓對象調用方法 4.對象方法的細節都被封裝在類的內部
封裝案例一:小明app
需求 # 1.小明體重75公斤 # 2.小明每次跑步都會減肥0.5公斤 # 3.小明每次吃東西體重會增長1公斤 # class Human: # def __init__(self,name,weight): # self.name = name #屬性:名字和體重 # self.weight = weight # # def run(self): # self.weight -= 0.5 #每跑一次步就瘦0.5 # def eat(self): # self.weight += 1 #吃一次胖1 # def __str__(self): # return '%s的體重爲%s' %(self.name,self.weight) # xm = Human('小明',75) # xm.eat() # xm.run() # print(Human) ——》實例化什麼就打印什麼 #當使用print輸出對象的時候,只要本身定義了__str__(self)方法,那麼就會打印從在這個方法中return的數據
案列二:房子添加傢俱spa
# 1、房子有戶型、總面積、傢俱名稱列表 # 房子沒有任何傢俱 # 2、傢俱備名字和佔地面積,其中 # 席夢思(bed):4平米 # 衣櫃(chest): 2平米 # 餐桌(table): 1.5平米 # 3、將以上3個傢俱添加到房子中 # 4、打印房子中,要求輸出:戶型、總面積、剩餘面積、傢俱名稱列表 class Items: def __init__(self,name,area): self.name = name self.area = area class House: def __init__(self,type,z): #剩餘面積self.f能夠根據總面積-傢俱面積獲得,因此不須要設置變量 self.type = type self.z = z self.f = z self.list = [] #傢俱列表爲空 def add(self,jj): self.list.append(jj.name) #已經定義過傢俱的屬性,能夠直接用 self.f -= jj.area def __str__(self): return '戶型爲%s,總面積爲%s,剩餘面積爲%s,傢俱列表名稱爲%s' %(self.type,self.z,self.f,self.list) #使用return bed = Items('木板牀',4) chest = Items('衣櫃',2) table = Items('桌子',1.5) h = House('地下室',20) #以上四步都是實例化 h.add(bed) h.add(chest) print(h) #直接打印實例化目標
案例三:士兵突擊設計
class Gun: --->先定義槍類型 def __init__(self,mode,count): ---》屬性爲類型和子彈數量 self.mode = mode self.count = 0 ---》初始子彈數量爲0 def shoot(self,number): ----》槍的技能1發射,子彈剩餘量=總彈數-發射的數量(不定) self.count -= number def add_count(self,number): ----》槍的技能2裝子彈,子彈剩餘量= 裝入與發射的差 self.count += number class Soldier: ----》定義士兵類型 def __init__(self,name): self.name = name ---》屬性1姓名 gun = None ----》屬性2 槍 def fire(self,count): count = n.count ---》定義士兵的槍的子彈數量爲上面槍剩餘子彈數 if count > 0: ----》大於0容許開炮,不然不容許 print('你持有ak47,子彈數量是%s,能夠開炮' %count) else: print ('沒有子彈了,不能夠開炮') n = Gun('ak47',0) ----》定義槍類型的對象爲n,n的名字是ak47 n.add_count(int(input('裝入子彈數:'))) ----》自定義裝入子彈數 n.shoot(int(input('射出子彈數:'))) ----》自定義射出子彈數 s = Soldier('許三多') ---》定義士兵類型爲許三多 print(s.fire(n.count)) ----》根據士兵手裏的ak是否有子彈來輸出是否能夠開炮