封裝是面向物件編程的一大特點,
面向物件編程的第一步 —— 根據職責將屬性和方法封裝到一個抽象的類中,外界使用類創建物件,然后讓物件呼叫方法,物件方法的細節都被封裝在類的內部,
簡單的理解封裝,即在設計類時,刻意地將一些屬性和方法隱藏在類的內部,這樣在使用此類時,將無法直接以“類物件.屬性名”或者“類物件.方法名(引數)”的形式呼叫這些屬性或方法,而只能用未隱藏的類方法間接操作這些隱藏的屬性和方法,
就好比使用電腦,我們只需要學會如何使用鍵盤和滑鼠就可以了,不用關心內部是怎么實作的,因為那是生產和設計人員該操心的,
實體:
需求設計:小明體重 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)
# 小明 愛跑步,跑步鍛煉身體
# 小明 是吃貨,吃完這頓再減肥
# 小明 是吃貨,吃完這頓再減肥
# 我的名字叫 小明 體重 76.50 公斤
再來一個實體:擺放家具,
需求設計:
- 1、房子(House) 有戶型、總面積和家具名稱串列,新房子沒有任何的家具,
- 2、家具(HouseItem) 有名字和占地面積,其中
- 席夢思(bed) 占地 4 平米
- 衣柜(chest) 占地 2 平米
- 餐桌(table) 占地 1.5 平米
- 3、將以上三件家具添加到房子中,
- 4、列印房子時,要求輸出:戶型、總面積、剩余面積、家具名稱串列,
首先定義家具類:
class HouseItem:
def __init__(self, name, area):
"""
:param name: 家具名稱
:param area: 占地面積
"""
self.name = name
self.area = area
def __str__(self):
return "[%s] 占地面積 %.2f" % (self.name, self.area)
bed = HouseItem("席夢思", 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 1.5)
print(bed) # [席夢思] 占地面積 4.00
print(chest) # [衣柜] 占地面積 2.00
print(table) # [餐桌] 占地面積 1.50
定義房子類:
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)
my_home = House("兩室一廳", 60)
my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)
print(my_home)
完善添加家具方法:
def add_item(self, 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
在這個實體中,主程式只負責創建房子物件和家具物件,讓房子物件呼叫 add_item 方法將家具添加到房子中,面積計算、剩余面積、家具串列等處理都被封裝到房子類的內部,
封裝機制保證了類內部資料結構的完整性,因為使用類的用戶無法直接看到類中的資料結構,只能使用類允許公開的資料,很好地避免了外部對內部資料的影響,提高了程式的可維護性,
除此之外,對一個類實作良好的封裝,用戶只能借助暴露出來的類方法來訪問資料,我們只需要在這些暴露的方法中加入適當的控制邏輯,即可輕松實作用戶對類中屬性或方法的不合理操作,
并且,對類進行良好的封裝,還可以提高代碼的復用性,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/24477.html
標籤:Python
上一篇:PHP丨PHP基礎知識之PHP基礎入門——函式「理論篇」
下一篇:Python全堆疊課程005
