<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 面向對象封裝案例 II ## 目標 - 士兵突擊案例 - 身份運算符 **封裝** 1. **封裝** 是面向對象編程的一大特點 2. 面向對象編程的 **第一步** —— 將 **屬性** 和 **方法** **封裝** 到一個抽象的 **類** 中 3. **外界** 使用 **類** 創建 **對象**,然后 **讓對象調用方法** 4. **對象方法的細節** 都被 **封裝** 在 **類的內部** > 一個對象的 **屬性** 可以是 **另外一個類創建的對象** ## 01. 士兵突擊 **需求** 1. **士兵** **許三多** 有一把 **AK47** 2. **士兵** 可以 **開火** 3. **槍** 能夠 **發射** 子彈 4. **槍** 裝填 **裝填子彈** —— **增加子彈數量** ![](https://pic.downk.cc/item/5e884682504f4bcb04af91c3.jpg) ### 1.1 開發槍類 **`shoot` 方法需求** - 1> 判斷是否有子彈,沒有子彈無法射擊 - 2> 使用 `print` 提示射擊,并且輸出子彈數量 ```python 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 開發士兵類 > 假設:每一個新兵 都 **沒有槍** **定義沒有初始值的屬性** 在定義屬性時,如果 **不知道設置什么初始值**,可以設置為 `None` - `None` **關鍵字** 表示 **什么都沒有** - 表示一個 **空對象**,**沒有方法和屬性,是一個特殊的常量** - 可以將 `None` 賦值給任何一個變量 **`fire` 方法需求** - 1> 判斷是否有槍,沒有槍沒法沖鋒 - 2> 喊一聲口號 - 3> 裝填子彈 - 4> 射擊 ```python 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() ``` **小結** 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` 用于判斷 **兩個變量 引用對象是否為同一個** `==` 用于判斷 **引用變量的值** 是否相等 ```python >>> a = [1, 2, 3] >>> b = [1, 2, 3] >>> b is a False >>> b == a True ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看