封裝是物件導向程式設計的一大特點
物件導向程式設計的第一步—— 將屬性和方法封裝到乙個抽象的類中
外界使用類建立物件,然後讓物件呼叫方法
物件方法的細節都被封裝在類的內部
需求
小明體重75.0
公斤
小明每次跑步會**0.5
公斤
小明每次吃東西體重增加1
公斤
```python 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)
需求
小明和小美都愛跑步
小明體重75.0
公斤
小美體重45.0
公斤
每次跑步都會減少0.5
公斤
每次吃東西都會增加1
公斤
提示
在物件的方法內部,是可以直接訪問物件的屬性的
同乙個類建立的多個物件之間,屬性互不干擾!
需求
房子(house)有戶型、總面積 和家具名稱列表
家具(houseitem)有名字和占地面積,其中
將以上三件家具新增到房子中
列印房子時,要求輸出:戶型、總面積、剩餘面積、家具名稱列表
剩餘面積
在建立房子物件時,定義乙個剩餘面積的屬性,初始值和總面積相等
當呼叫add_item
方法,向房間新增家具時,讓剩餘面積-=家具面積
思考:應該先開發哪乙個類?
答案——家具類
家具簡單
房子要使用到家具,被使用的類,通常應該先開發
```python 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) print(chest) print(table)
小結
建立了乙個家具類,使用到__init__
和__str__
兩個內建方法
使用家具類建立了三個家具物件,並且輸出家具資訊
```python 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)
myhome.additem(bed) myhome.additem(chest) myhome.additem(table)
print(my_home) ```
小結
建立了乙個房子類,使用到__init__
和__str__
兩個內建方法
準備了乙個add_item
方法準備新增家具
使用房子類建立了乙個房子物件
讓房子物件呼叫了三次add_item
方法,將三件家具以實參傳遞到add_item
內部
需求
```python def add_item(self, item):
print("要新增 %s" % item)
# 1. 判斷家具面積是否大於剩餘面積
if item.area > self.free_area:
print("%s 的面積太大,不能新增到房子中" % item.name)
return
# 2. 將家具的名稱追加到名稱列表中
# 3. 計算剩餘面積
self.free_area -= item.area
物件導向封裝案例
封裝是物件導向程式設計的一大特點 物件導向程式設計的第一步 將屬性和方法封裝到乙個抽象的類中 外界使用類建立物件,然後讓物件呼叫方法物件方法的細節都被封裝在類的內部 class person 人類 def init self,name,weight self.name name self.weigh...
Python物件導向04 物件導向封裝案例
封裝是物件導向程式設計的一大特點 物件導向程式設計的第一步 將屬性和方法封裝到乙個抽象的類中 外界使用類建立物件,然後讓物件呼叫方法物件方法的細節都被封裝在類的內部需求 小明體重75.0公斤 小明每次跑步會 0.5公斤 小明每次吃東西體重增加1公斤 class person 人類 def init ...
Python物件導向05 物件導向封裝案例 II
封裝 封裝是物件導向程式設計的一大特點 物件導向程式設計的第一步 將屬性和方法封裝到乙個抽象的類中 外界使用類建立物件,然後讓物件呼叫方法物件方法的細節都被封裝在類的內部乙個物件的屬性可以是另外乙個類建立的物件 需求 士兵許三多有一把ak47士兵可以 槍能夠發射子彈 槍裝填裝填子彈 增加子彈數量sh...