python初識面向對象

類與對象的關係
類: 就是建立對象的第一步,先寫類
對象: 經過類來建立對象

類是對某事物的歸類(類就是對屬性和方法的封裝)
    __init__(self, 參數): 參數通常做爲屬性設置給對象,對象就是self,對屬性的封裝,(根據須要,若是在類中傳參就用__init__,若是不須要傳參,就直在類裏定義函數便可)
    def 方法(self, 參數): 方法,第一個參數通常是固定的self,當前類的對象
建立類:
    class 類名:

對象是某類型的一個具體
建立對象:
    變量 = 類名()   #實例化 <-> 建立對象
    變量.屬性       #訪問對象的屬性信息
    變量.方法()     #訪問類中的方法python

複製代碼
 1 class 類名:  2 def __init__(self,值1,值2): # __init__(初始化方法,又被成爲構造方法)  3 self.屬性 = 值1  4 self.屬性 = 值2  5  6 def 方法(self):  7  方法體  8 def 方法2(self):  9  方法體2 10 11 對象名 = 類名(值1,值2) 12 對象名.方法() 13 對象名.方法2()
複製代碼

建立類web

複製代碼
 1 class Car: #類名首字母大寫,嚴格遵照變量命名規則  2 pass  3 c = Car() #建立對象,對象名=類名()  4 c.color = '紅色' # 對象.屬性(.意思就是'的')當屬性不存在的時候,添加一個屬性  5 c.pai = '京A88888'  6 c.color = '黑色' # 當屬性存在的時候是修改屬性信息(相似於字典根據key修改value)  7 print(c.color)  8 print(c.pai)  9 結果 10 紅色 11 黑色 12 京A88888
複製代碼

建立一個類並調用這個類
__init__方法是一個特殊的方法,初始化方法(構造方法),在建立對象的時候,默認執行這個函數
在建立對象的時候會自動的調用__init__()
self就是建立出來的對象函數

複製代碼
 1 class Car:  2 def __init__(self,color,pai):  3 self.a = color  4 self.pai = pai  5 def pao(self): #在類中寫的函數就是方法,self當前類的對象  6 print('我%s的%s車能跑'%(self.a,self.pai))  7 def jump(self):  8 print('個人%s車能飛'%self.pai)  9 c=Car('紅色','京A88888') # 建立Car類型對象,self參數不須要管 10 c.pao() 11 c.jump() 12 c2 = Car('黑色','京B66666') 13 c2.pao() 14 c2.jump() 15 結果 16 我紅色的京A88888車能跑 17 個人京A88888車能飛 18 我黑色的京B66666車能跑 19 個人京B66666車能飛 20 21 事例2,對象傳參 22 class Car: 23 def __init__(self,color,pai): 24 self.a = color 25 self.pai = pai 26 def pao(self,ret): 27 print('我%s的%s車能跑%s'%(self.a,self.pai,ret)) 28 def jump(self): 29 print('個人%s車能飛'%self.pai) 30 c=Car('紅色','京A88888') 31 c.pao('太空') 32 c.jump() 33 結果 34 我紅色的京A88888車能跑太空 35 個人京A88888車能飛 36 37 38 練習 39 用向對象的思惟來模擬LOL裏的蓋倫上陣殺敵 40 class Hero: 41 def __init__(self,name,nickname): 42 self.name = name 43 self.nickname = nickname 44 def synopsis(self): 45 print('%s外號%s'%(self.name,self.nickname)) 46 def q(self): 47 print('拎着大寶劍嗷嗷跑') 48 def w(self): 49 print('護盾') 50 def r(self): 51 print('大寶劍') 52 gw = Hero('蓋倫','德瑪西亞之力') 53 gw.synopsis() 54 gw.q() 55 gw.w() 56 gw.r() 57 結果 58 蓋倫外號德瑪西亞之力 59 拎着大寶劍嗷嗷跑 60 護盾 61 大寶劍 62 63 用向對象的思惟來完成用戶登陸 64 class People: 65 def __init__(self,user,pwd): 66 self.user = user 67 self.passwd = pwd 68 def login(self): 69 use = input('user:') 70 password = input('passwd:') 71 if use == self.user and password == self.passwd: 72 print('登錄成功') 73 else: 74 print('登錄失敗') 75 Lgin = People('bob','123') 76 Lgin.login()
複製代碼

面向對象和麪向過程對比
腳本:(簡單)
一切以事務的發展流程爲中心
根據業務邏輯從上到下寫壘代碼ui

1 print('開冰箱門') 2 print('裝大象') 3 print('關閉冰箱')

函數式(比腳本麻煩)
將某功能代碼封裝到函數中,往後便無需重複編寫,僅調用函數便可this

複製代碼
 1 def kai():  2 print('開冰箱門')  3 def zhuang():  4 print('裝大象')  5 def guan():  6 print('關閉冰箱')  7 kai()  8 zhuang()  9 zhuang() 10 guan()
複製代碼

面向對象:
一切以對象爲中心,一切皆爲對象,具體的某一個事務就是對象
對函數進行分類和封裝,讓開發"更快更好更強..."
對整個系統進行分析,分析出須要哪些對象,而後給對象進行歸類
先寫類,而後使用類建立對象,最後用對象去執行相關的操做spa

複製代碼
 1 class Elephant:  2 def __init__(self):  3 print('建立大象')  4 def kai(self):  5 print('開冰箱門')  6 def zhuang(self):  7 print('裝大象')  8 def guan(self):  9 print('關閉冰箱') 10 e = Elephant() 11 e.kai() 12 e.zhuang() 13 e.guan()
複製代碼

總結
腳本簡單,不須要構思整個程序的概況
函數側重的是功能,對功能有了概況
面向對象側重的是歸類
面向過程: 代碼很是的冗餘. 尤爲是參數
面向對象的程序:
優勢: 不須要像原來同樣傳遞一樣的參數了,結果相對清晰,可維護性好
缺點: 代碼量比原來大,上手太難
應用場景:
若是寫一些比較小的程序用面向過程
程序很複雜,很龐大建議用面向對象
   
python同時支持面向對象和麪向過程:
面向過程: 應用程序相對比較小,不須要大規模的設計
面向對象: 程序很是大,項目管理維護成本很高,此時更適合用面向對象(結構)


封裝
1. 對屬性的封裝
2. 對功能的封裝
3. 模塊的封裝
4. 包的封裝設計

複製代碼
 1 class Game:  2 def login(self):  3 print("登陸")  4 def recharge(self):  5 print("充錢")  6 def uninstall(self):  7 print("卸載")  8 def zhaoduixiang(self):  9 print("找對象") 10 11 class Game1: 12 def recharge(self): 13 print("充錢") 14 def uninstall(self): 15 print("卸載") 16 17 class Game2: 18 def recharge(self): 19 print("充錢") 20 def uninstall(self): 21 print("卸載") 22 23 g = Game2() 24 g.uninstall() 25 結果 26 卸載
複製代碼

繼承
子類自動擁有父類中除了私有內容外的其餘全部內容
繼承目的: 對父類進行擴展code

複製代碼
 1 class Foo:  2 def getmoney(self):  3 print('多花錢')  4 class Bar(Foo):  5 pass  6 b = Bar()  7 b.getmoney()  8 結果  9 多花錢 10 11 事例2 12 class Animal: 13 def dong(self): 14 print('動物會叫') 15 class Cat(Animal): 16 def an(self): 17 print('貓捉老鼠') 18 c = Cat() 19 c.dong() 20 c.an() #子類能夠執行子類和父類中的方法 21 22 c = Animal() #父類的對象不能執行子類中的功能 23 c.dong() 24 # c.an() # 建立的是Animal,因此不能執行子類中的方法 25 26 事例3 27 class Animal: 28 def dong(self): 29 print('動物會叫') 30 class Cat(Animal): # 子類實際上是對父類的一種擴展 31 def dong(self): # 子類中寫了和父類如出一轍的方法. 這個叫方法的覆蓋, 重寫 32 print('貓捉老鼠') 33 def cat(self): 34 print('貓上躥下跳') 35 c = Cat() 36 c.dong() # 類中的方法的查詢順序,先找本身,而後再找父類 37 結果 38 貓捉老鼠 39 40 python支持多繼承 41 class Foo1: 42 def dong(self): 43 print('動物會叫') 44 def cat(self): 45 print('貓上躥下跳') 46 class Foo2: 47 def dong(self): 48 print('貓捉老鼠') 49 class Bar(Foo2,Foo1): #哪一個類在前優先使用哪一個類 50 pass 51 b = Bar() # 就近原則 52 b.dong() 53 結果 54 貓捉老鼠
複製代碼

多態(同一個對象. 多種形態)
優勢:超強的可擴展性,面向對象的核心就是多態orm

複製代碼
 1 class Animal:  2 def chi(self):  3 print("會吃")  4 class Tiger(Animal):  5 def chi(self):  6 print("老虎吃肉")  7 class Elephant(Animal):  8 def chi(self):  9 print("大象吃香蕉") 10 def wei_animal(ani): 11  ani.chi() 12 13 t = Tiger() 14 e = Elephant() 15 16 wei_animal(t) 17 wei_animal(e) 18 結果 19 老虎吃肉 20 大象吃香蕉
相關文章
相關標籤/搜索