1. 程式人生 > 程式設計 >Python面向物件封裝操作案例詳解 II

Python面向物件封裝操作案例詳解 II

本文例項講述了Python面向物件封裝操作。分享給大家供大家參考,具體如下:

目標

士兵突擊案例
身份運算子

封裝

封裝 是面向物件程式設計的一大特點
面向物件程式設計的 第一步 —— 將 屬性 和 方法 封裝 到一個抽象的 類 中
外界 使用 類 建立 物件,然後 讓物件呼叫方法
物件方法的細節 都被 封裝 在 類的內部
一個物件的 屬性 可以是 另外一個類建立的物件

01. 士兵突擊

需求

士兵 許三多 有一把 AK47
士兵 可以 開火
槍 能夠 發射 子彈
槍 裝填 裝填子彈 —— 增加子彈數量
在這裡插入圖片描述

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 開發士兵類

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

定義沒有初始值的屬性

在定義屬性時,如果 不知道設定什麼初始值,可以設定為 None

None 關鍵字 表示 什麼都沒有
表示一個 空物件,沒有方法和屬性,是一個特殊的常量
可以將 None 賦值給任何一個變數
fire 方法需求

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()

小結

建立了一個 士兵類,使用到 init 內建方法
在定義屬性時,如果 不知道設定什麼初始值,可以設定為 None
在 封裝的 方法內部,還可以讓 自己的 使用其他類建立的物件屬性 呼叫已經 封裝好的方法

02. 身份運算子

身份運算子用於 比較 兩個物件的 記憶體地址 是否一致 —— 是否是對同一個物件的引用

在 Python 中針對 None 比較時,建議使用 is 判斷
在這裡插入圖片描述
is 與 == 區別:
is 用於判斷 兩個變數 引用物件是否為同一個
== 用於判斷 引用變數的值 是否相等

>>> a = [1,2,3]
>>> b = [1,3]
>>> b is a 
False
>>> b == a
True

更多關於Python相關內容感興趣的讀者可檢視本站專題:《Python面向物件程式設計入門與進階教程》、《Python資料結構與演算法教程》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python編碼操作技巧總結》及《Python入門與進階經典教程》

希望本文所述對大家Python程式設計有所幫助。