Python_從零開始學習_(37) 面向物件封裝案例 2
阿新 • • 發佈:2018-11-02
目錄
封裝
- 封裝 是面向物件程式設計的一大特點
- 面向物件程式設計的 第一步 ---- 將 屬性 和 方法 封裝 到一個抽象的 類 中
- 外界 使用 類 建立 物件, 然後 讓物件使用方法
- 物件方法的細節 都被 封裝 在 類的內部
1. 士兵突擊
需求
- 士兵 許三多 有一把 AK47
- 士兵 可以 開火
- 槍 能夠 發射 子彈
- 槍 裝填子彈 ---- 增加子彈數量
類 => Soldier 類 => Gun
屬性 => name , gun 屬性 => model ,bullet_count
方法 => fire() 方法 => add_bullet(count)
1.1 開發槍類
class Gun: def __init__(self, model): # 1. 槍的型號 self.model = model # 2. 子彈的數量 self.bullet_count = 0 def add_bullet(self, count): self.bullet_count += count def shoot(self): # 1. 判斷子彈數量 if self.bullet_count <= 0: print("%s 沒有子彈了..." % self.model) return # 2. 發射子彈 self.bullet_count -= 1 # 3. 提示發射資訊 print("[%s] 突突突...[%d]" % (self.model, self.bullet_count)) # 1. 建立槍物件 ak47 = Gun("AK47") ak47.add_bullet(10) ak47.shoot()
1.2 開發士兵類
假設: 每一個新兵 都 沒有槍
定義沒有初始值的屬性
在定義屬性時, 如果 不指定設定什麼初始值, 可以設定為 None
- None 關鍵字 表示 什麼都沒有
- 表示一個 空物件, 沒有方法和屬性, 是一個特殊的常量
- 可以將 None 賦值給任何一個變數
fire 方法需求
- 判斷是否有槍, 沒有槍沒法衝鋒
- 喊一聲口號
- 裝填子彈
- 射擊
class Gun:
def __init__(self, model):
# 1. 槍的型號
self.model = model
# 2. 子彈的數量
self.bullet_count = 0
def add_bullet(self, count):
self.bullet_count += count
def shoot(self):
# 1. 判斷子彈數量
if self.bullet_count <= 0:
print("%s 沒有子彈了..." % self.model)
return
# 2. 發射子彈
self.bullet_count -= 1
# 3. 提示發射資訊
print("[%s] 突突突...[%d]" % (self.model, self.bullet_count))
class Soldier:
def __init__(self, name):
# 1. 姓名
self.name = name
# 2. 槍 新兵沒有槍
self.gun = None
def fire(self):
# 1. 判斷士兵是否有槍
if self.gun == None:
print("%s 還沒有槍..." % self.name)
return
# 2. 喊口號
print("衝鴨...%s" % self.name)
# 3. 裝子彈
self.gun.add_bullet(50)
# 4. 發射子彈
self.gun.shoot()
# 1. 建立槍物件
ak47 = Gun("AK47")
ak47.add_bullet(10)
ak47.shoot()
# 2. 建立士兵物件
xusanduo = Soldier("許三多")
xusanduo.gun = ak47
xusanduo.fire()
print(xusanduo.gun)
2. 身份運算子
身份運算子用於 比較 兩個物件的 記憶體地址 是否一致 ---- 是否是對同一個物件的引用
- 在 Python 中針對 None 比較時, 建議使用 js 判斷
運算子 | 描述 | 例項 |
---|---|---|
is | is 是判斷兩個識別符號是不是引用同一個物件 | x is y , 類似 id(x) == id(y) |
is not | is not 是判斷兩個識別符號是不是引用不同物件 | x is not y , 類似 id(a) != id(b) |
is 與 == 區別
is 用於判斷 兩個變數 引用物件是否為同一個
== 用於判讀 引用變數的值 是否相等
a = [1, 2, 3]
b = [1, 2, 3]
b is a
False
b == a
True