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ù)上面的類圖表格來(lái)創(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] 沒(méi)有子彈了" % 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è)士兵都沒(méi)有qiang
定義沒(méi)有初始值的屬性:在定義屬性時(shí),如果不知道設(shè)置什么初始值,可以設(shè)置為None
- None關(guān)鍵字表示 什么都沒(méi)有
- 表示一個(gè)空對(duì)象,沒(méi)有方法和屬性,是一個(gè)特殊的常量
- 可以將NNone賦值給任何一個(gè)變量
fire方法需求: - 判斷是否有qiang,沒(méi)有槍沒(méi)辦法沖鋒
- 喊一聲口號(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] 沒(méi)有子彈了" % 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 = 新兵沒(méi)有槍
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] 沒(méi)有子彈了" % 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 = 新兵沒(méi)有槍
self.gun = None
def fire(self):
# 1. 判斷是否有槍
if self.gun == None:
print("[%s]還沒(méi)有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爬取梨視頻實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了基于python爬取梨視頻實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
利用python實(shí)現(xiàn)對(duì)excel文件進(jìn)行加密
由于文件內(nèi)容的私密性,需要對(duì)Excel文件進(jìn)行加密,保護(hù)文件以免給第三方看到,本文將以Python語(yǔ)言為例,和大家講講如何對(duì)Excel文件進(jìn)行加密,感興趣的小伙伴可以了解下2025-04-04
OpenCV+OCR實(shí)現(xiàn)弧形文字識(shí)別的示例代碼
本文主要介紹了OpenCV+OCR實(shí)現(xiàn)弧形文字識(shí)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-07-07
python3.5 email實(shí)現(xiàn)發(fā)送郵件功能
這篇文章主要為大家詳細(xì)介紹了python3.5 email實(shí)現(xiàn)發(fā)送郵件功能,包含txt、圖片、HTML、附件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Python+OpenCV 實(shí)現(xiàn)簡(jiǎn)單的高斯濾波(推薦)
這篇文章主要介紹了Python+OpenCV 實(shí)現(xiàn)簡(jiǎn)單的高斯濾波,在文中需要注意的是,這里我沒(méi)有特判當(dāng)sigma = 0的時(shí)候的情況,具體實(shí)現(xiàn)過(guò)程跟隨小編一起看看吧2021-09-09

