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

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

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

目標

封裝
小明愛跑步
存放傢俱

01. 封裝

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

02. 小明愛跑步

需求

小明 體重 75.0 公斤
小明每次 跑步 會減肥 0.5 公斤
小明每次 吃東西 體重增加 1 公斤
在這裡插入圖片描述
提示:在 物件的方法內部,是可以 直接訪問物件的屬性 的!

程式碼實現:

class Person:
  """人類"""

  def __init__(self,name,weight):

    self.name = name
    self.weight = weight

  def __str__(self):

    return "我的名字叫 %s 體重 %.2f 公斤" % (self.name,self.weight)

  def run(self):
    """跑步"""

    print("%s 愛跑步,跑步鍛鍊身體" % self.name)
    self.weight -= 0.5

  def eat(self):
    """吃東西"""

    print("%s 是吃貨,吃完這頓再減肥" % self.name)
    self.weight += 1


xiaoming = Person("小明",75)

xiaoming.run()
xiaoming.eat()
xiaoming.eat()

print(xiaoming)

2.1 小明愛跑步擴充套件 —— 小美也愛跑步

需求

小明 和 小美 都愛跑步
小明 體重 75.0 公斤
小美 體重 45.0 公斤
每次 跑步 都會減少 0.5 公斤
每次 吃東西 都會增加 1 公斤
在這裡插入圖片描述
提示

在 物件的方法內部,是可以 直接訪問物件的屬性 的
同一個類 建立的 多個物件 之間,屬性 互不干擾!
在這裡插入圖片描述

03. 擺放傢俱

需求

房子(House) 有 戶型、總面積 和 傢俱名稱列表
新房子沒有任何的傢俱
傢俱(HouseItem) 有 名字 和 佔地面積,其中
席夢思(bed) 佔地 4 平米
衣櫃(chest) 佔地 2 平米
餐桌(table) 佔地 1.5 平米
將以上三件 傢俱 新增 到 房子 中

列印房子時,要求輸出:戶型、總面積、剩餘面積、傢俱名稱列表
在這裡插入圖片描述
剩餘面積

在建立房子物件時,定義一個 剩餘面積的屬性,初始值和總面積相等
當呼叫 add_item 方法,向房間 新增傢俱 時,讓 剩餘面積 -= 傢俱面積
思考:應該先開發哪一個類?

答案 —— 傢俱類

傢俱簡單
房子要使用到傢俱,被使用的類,通常應該先開發

3.1 建立傢俱

class HouseItem:

  def __init__(self,area):
    """

    :param name: 傢俱名稱
    :param area: 佔地面積
    """
    self.name = name
    self.area = area

  def __str__(self):
    return "[%s] 佔地面積 %.2f" % (self.name,self.area)


# 1. 建立傢俱
bed = HouseItem("席夢思",4)
chest = HouseItem("衣櫃",2)
table = HouseItem("餐桌",1.5)

print(bed)
print(chest)
print(table)

小結

建立了一個 傢俱類,使用到 initstr 兩個內建方法
使用 傢俱類 建立了 三個傢俱物件,並且 輸出傢俱資訊

3.2 建立房間

class House:

  def __init__(self,house_type,area):
    """

    :param house_type: 戶型
    :param area: 總面積
    """
    self.house_type = house_type
    self.area = area
    
    # 剩餘面積預設和總面積一致
    self.free_area = area
    # 預設沒有任何的傢俱
    self.item_list = []

  def __str__(self):

    # Python 能夠自動的將一對括號內部的程式碼連線在一起
    return ("戶型:%s\n總面積:%.2f[剩餘:%.2f]\n傢俱:%s"
        % (self.house_type,self.area,self.free_area,self.item_list))

  def add_item(self,item):

    print("要新增 %s" % item)

...

# 2. 建立房子物件
my_home = House("兩室一廳",60)

my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)

print(my_home)

小結

建立了一個 房子類,使用到 initstr 兩個內建方法
準備了一個 add_item 方法 準備新增傢俱
使用 房子類 建立了 一個房子物件
讓 房子物件 呼叫了三次 add_item 方法,將 三件傢俱 以實參傳遞到 add_item 內部

3.3 新增傢俱

需求

1> 判斷 傢俱的面積 是否 超過剩餘面積,如果超過,提示不能新增這件傢俱
2> 將 傢俱的名稱 追加到 傢俱名稱列表 中
3> 用 房子的剩餘面積 - 傢俱面積

  def add_item(self,item):

    print("要新增 %s" % item)
    # 1. 判斷傢俱面積是否大於剩餘面積
    if item.area > self.free_area:
      print("%s 的面積太大,不能新增到房子中" % item.name)

      return

    # 2. 將傢俱的名稱追加到名稱列表中
    self.item_list.append(item.name)

    # 3. 計算剩餘面積
    self.free_area -= item.area

3.4 小結

主程式只負責建立 房子 物件和 傢俱 物件
讓 房子 物件呼叫 add_item 方法 將傢俱新增到房子中
面積計算、剩餘面積、傢俱列表 等處理都被 封裝 到 房子類的內部

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

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