Python面向?qū)ο蠓庋b案例基礎(chǔ)教程
封裝
- 封裝是面向?qū)ο缶幊痰囊淮筇攸c(diǎn)
- 面向?qū)ο缶幊痰牡谝徊剑簩傩院头椒ǚ盅b到一個(gè)抽象的類中
- 外界使用類創(chuàng)建對(duì)象,然后讓對(duì)象調(diào)用方法
- 對(duì)象方法的細(xì)節(jié)都被封裝在累的內(nèi)部
注意:一個(gè)對(duì)象的屬性可以是另外一個(gè)類創(chuàng)建的對(duì)象
一、士兵突擊案例需求分析
需求:
- 士兵張小嘎 有一把 Ak47
- 士兵 可以 開火
- qiang 能夠 發(fā)射子彈
- qiang 需要 裝填子彈----增加子彈數(shù)量
根據(jù)需求,劃分類,共劃分兩個(gè)類,一個(gè)是士兵類,一個(gè)是qiang類,由于創(chuàng)建士兵類中用到qiang,所以在創(chuàng)建類的時(shí)候先創(chuàng)建qiang類。
二、創(chuàng)建qiang類
根據(jù)上面的類圖表格來創(chuàng)建qiang類。
model是qiang的型號(hào),bullet_count是子彈的數(shù)量,add_bullet(self, count)裝填子彈方法,Shoot(self)是發(fā)射子彈方法。
代碼:
class Gun(): def __init__(self, model): # 1. qiang的型號(hào) self.model = model # 2. 子彈的數(shù)量,初始值為0 self.bullet_count = 0 def add_bullet(self, count): self.bullet_count += count def shoot(self): # 1. 判斷子彈數(shù)量 if self.bullet_count <= 0: print("[%s] 沒有子彈了" % self.model) return # 2. 發(fā)射子彈, -1 self.bullet_count -= 1 # 提示發(fā)射信息 print("[%s] 突突突。。。[%d]" % (self.model, self.bullet_count)) # 1. 創(chuàng)建qiang對(duì)象 ak47 = Gun("Ak47") # 2. 調(diào)用方法 ak47.add_bullet(50) ak47.shoot()
執(zhí)行結(jié)果:
三、創(chuàng)建士兵類
假設(shè):每一個(gè)士兵都沒有qiang
定義沒有初始值的屬性:在定義屬性時(shí),如果不知道設(shè)置什么初始值,可以設(shè)置為None
- None關(guān)鍵字表示 什么都沒有
- 表示一個(gè)空對(duì)象,沒有方法和屬性,是一個(gè)特殊的常量
- 可以將NNone賦值給任何一個(gè)變量
fire方法需求: - 判斷是否有qiang,沒有槍沒辦法沖鋒
- 喊一聲口號(hào)
- 裝填子彈
- 射擊
代碼:
class Gun(): def __init__(self, model): # 1. qiang的型號(hào) self.model = model # 2. 子彈的數(shù)量,初始值為0 self.bullet_count = 0 def add_bullet(self, count): self.bullet_count += count def shoot(self): # 1. 判斷子彈數(shù)量 if self.bullet_count <= 0: print("[%s] 沒有子彈了" % self.model) return # 2. 發(fā)射子彈, -1 self.bullet_count -= 1 # 提示發(fā)射信息 print("[%s] 突突突。。。[%d]" % (self.model, self.bullet_count)) class Soldier(): def __init__(self, name): # 1. 姓名 self.name = name # 2. qiang = 新兵沒有槍 self.gun = None # 1. 創(chuàng)建qiang對(duì)象 ak47 = Gun("Ak47") # 2. 調(diào)用方法 ak47.add_bullet(50) ak47.shoot() # 3. 創(chuàng)建士兵對(duì)象-張小嘎 zhang = Soldier("張小嘎") # 用賦值語(yǔ)句,把a(bǔ)k47交給張小嘎 zhang.gun = ak47 print(zhang.gun)
執(zhí)行結(jié)果:
四、完成開火方法
代碼:
class Gun(): def __init__(self, model): # 1. qiang的型號(hào) self.model = model # 2. 子彈的數(shù)量,初始值為0 self.bullet_count = 0 def add_bullet(self, count): self.bullet_count += count def shoot(self): # 1. 判斷子彈數(shù)量 if self.bullet_count <= 0: print("[%s] 沒有子彈了" % self.model) return # 2. 發(fā)射子彈, -1 self.bullet_count -= 1 # 提示發(fā)射信息 print("[%s] 突突突。。。[%d]" % (self.model, self.bullet_count)) class Soldier(): def __init__(self, name): # 1. 姓名 self.name = name # 2. qiang = 新兵沒有槍 self.gun = None def fire(self): # 1. 判斷是否有槍 if self.gun == None: print("[%s]還沒有qiang" % self.name) return # 2. 高喊沖鋒口號(hào) print("沖啊。。。 [%s]" % self.name) # 3. 裝填子彈 self.gun.add_bullet(50) # 4. 發(fā)射子彈射擊 self.gun.shoot() # 1. 創(chuàng)建qiang對(duì)象 ak47 = Gun("Ak47") # 2. 調(diào)用方法 # ak47.add_bullet(50) # ak47.shoot() # 3. 創(chuàng)建士兵對(duì)象-張小嘎 zhang = Soldier("張小嘎") # 用賦值語(yǔ)句,把a(bǔ)k47交給張小嘎 zhang.gun = ak47 zhang.fire() # print(zhang.gun)
執(zhí)行結(jié)果:
以上就是關(guān)于面向?qū)ο蟀咐勘粨舻姆治龊痛a演練,主要知識(shí)點(diǎn)就是一個(gè)對(duì)象的屬性可以是另外一個(gè)類創(chuàng)建的對(duì)象,以及關(guān)鍵字None的使用,更多關(guān)于Python面向?qū)ο蠓庋b的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于Python?+?PyQt搭建可視化頁(yè)面的詳細(xì)教程
PyQt是一個(gè)Python綁定庫(kù),它是基于Qt庫(kù)的,PyQt提供了一整套豐富的組件,包括窗口、按鈕、菜單、列表框等,以及事件處理、布局管理、網(wǎng)絡(luò)通信等多種功能,本文介紹了基于Python?+?PyQt搭建可視化頁(yè)面的詳細(xì)教程,需要的朋友可以參考下2024-07-07Python設(shè)計(jì)模式之職責(zé)鏈模式原理與用法實(shí)例分析
這篇文章主要介紹了Python設(shè)計(jì)模式之職責(zé)鏈模式,結(jié)合具體實(shí)例形式分析了Python責(zé)任鏈模式的概念、原理、定義與使用方法,需要的朋友可以參考下2019-01-01Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之雙端隊(duì)列詳解
這篇文章主要介紹了Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之雙端隊(duì)列,詳細(xì)講述了雙端隊(duì)列的概念、功能、定義及Python實(shí)現(xiàn)與使用雙端隊(duì)列的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04Python爬蟲庫(kù)requests獲取響應(yīng)內(nèi)容、響應(yīng)狀態(tài)碼、響應(yīng)頭
上一節(jié)我們給大家介紹了Python爬蟲庫(kù)requests的發(fā)送請(qǐng)求傳參等使用方法,今天為大家介紹下requests獲取響應(yīng)內(nèi)容、響應(yīng)狀態(tài)碼、響應(yīng)頭等相關(guān)信息2020-01-01python 將numpy維度不同的數(shù)組相加相乘操作
這篇文章主要介紹了python 將numpy維度不同的數(shù)組相加相乘操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03Matplotlib控制坐標(biāo)軸刻度間距與標(biāo)簽實(shí)例代碼
在matplotlib中,記號(hào)是圖形兩個(gè)軸上的小標(biāo)記,到目前為止,我們讓matplotlib處理軸圖例上記號(hào)的位置,下面這篇文章主要給大家介紹了關(guān)于Matplotlib控制坐標(biāo)軸刻度間距與標(biāo)簽的相關(guān)資料,需要的朋友可以參考下2021-10-10