1. 程式人生 > >Python_從零開始學習_(37) 面向物件封裝案例 2

Python_從零開始學習_(37) 面向物件封裝案例 2

目錄

1.  士兵突擊

1.1  開發槍類

1.2  開發士兵類

2.  身份運算子

is 與 == 區別


封裝

  1. 封裝 是面向物件程式設計的一大特點
  2. 面向物件程式設計的 第一步 ---- 將 屬性 和 方法 封裝 到一個抽象的 類 中
  3. 外界 使用 類 建立 物件,  然後 讓物件使用方法
  4. 物件方法的細節 都被 封裝 在 類的內部

1.  士兵突擊

需求

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

類 =>     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 方法需求

  1. ​​​​​​​判斷是否有槍,  沒有槍沒法衝鋒
  2. 喊一聲口號
  3. 裝填子彈
  4. 射擊
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