封裝案例2

封裝python

  1. 封裝 是面向對象編程的一大特色
  2. 面向對象編程的 第一步 —— 將 屬性 和 方法 封裝 到一個抽象的  中
  3. 外界 使用  建立 對象,而後 讓對象調用方法
  4. 對象方法的細節 都被 封裝 在 類的內部

一個對象的 屬性 能夠是 另一個類建立的對象編程

01. 士兵突擊

需求spa

  1. 士兵 許三多 有一把 AK47
  2. 士兵 能夠 開火
  3.  可以 發射 子彈
  4.  裝填 裝填子彈 —— 增長子彈數量

 

 

code

1.1 開發槍類

shoot 方法需求對象

  • 1> 判斷是否有子彈,沒有子彈沒法射擊
  • 2> 使用 print 提示射擊,而且輸出子彈數量
class Gun: def __init__(self, model): # 槍的型號 self.model = model # 子彈數量 self.bullet_count = 0 def add_bullet(self, count): self.bullet_count += count def shoot(self): # 判斷是否還有子彈 if self.bullet_count <= 0: print("沒有子彈了...") return # 發射一顆子彈 self.bullet_count -= 1 print("%s 發射子彈[%d]..." % (self.model, self.bullet_count)) # 建立槍對象 ak47 = Gun("ak47") ak47.add_bullet(50) ak47.shoot() 

1.2 開發士兵類

假設:每個新兵 都 沒有槍blog

定義沒有初始值的屬性內存

在定義屬性時,若是 不知道設置什麼初始值,能夠設置爲 None開發

  • None 關鍵字 表示 什麼都沒有
  • 表示一個 空對象沒有方法和屬性,是一個特殊的常量
  • 能夠將 None 賦值給任何一個變量

fire 方法需求string

  • 1> 判斷是否有槍,沒有槍無法衝鋒
  • 2> 喊一聲口號
  • 3> 裝填子彈
  • 4> 射擊
class Soldier: def __init__(self, name): # 姓名 self.name = name # 槍,士兵初始沒有槍 None 關鍵字表示什麼都沒有 self.gun = None def fire(self): # 1. 判斷士兵是否有槍 if self.gun is None: print("[%s] 尚未槍..." % self.name) return # 2. 高喊口號 print("衝啊...[%s]" % self.name) # 3. 讓槍裝填子彈 self.gun.add_bullet(50) # 4. 讓槍發射子彈 self.gun.shoot() 

小結it

  1. 建立了一個 士兵類,使用到 __init__ 內置方法
  2. 在定義屬性時,若是 不知道設置什麼初始值,能夠設置爲 None
  3. 在 封裝的 方法內部,還可讓 本身的 使用其餘類建立的對象屬性 調用已經 封裝好的方法

02. 身份運算符

身份運算符用於 比較 兩個對象的 內存地址 是否一致 —— 是不是對同一個對象的引用

  • 在 Python 中針對 None 比較時,建議使用 is 判斷
運算符 描述 實例
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
相關文章
相關標籤/搜索