面向對象封裝案例

01.封裝

1.封裝 是面向對象編程的一大特色
2.面向對象編程的第一步 —— 將屬性和方法封裝到一個抽象的類中
3.外界使用類建立對象,而後讓對象調用方法
4.對象方法的細節 都被封裝在類的內部

02.小明愛跑步

需求 1.小明體重 75.0 公斤
2.小明每次跑步會減肥 0.5 公斤
3.小明每次吃東西體重增長 1 公斤

    Person
-------------------
name  weight
-------------------
_init_(self,name,weight):
_str_(self):
run(self):
eat(self):
-------------------
class Person:
    def __init__(self,name,weight):

        # self.屬性 = 形參
        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.0)

xiaoming.run()
xiaoming.eat()

print(xiaoming)

2.1 小明愛跑步擴展 —— 小美也愛跑步編程

需求 1.小明和小美都愛跑步
2.小明體重 75.0 公斤
3.小美體重 45.0 公斤
4.每次跑步都會減小 0.5 公斤
5.每次吃東西都會增長 1 公斤
提示 
1.在對象的方法內部,是能夠直接訪問對象的屬性的
2.同一類建立的多個對象之間,屬性互不干擾!
class Person:
    def __init__(self,name,weight):

        # self.屬性 = 形參
        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.0)

xiaoming.run()
xiaoming.eat()

print(xiaoming)

# 小美愛跑步
xiaomei = Person("小美",45)

xiaomei.eat()
xiaomei.run()

print(xiaomei)

 

03.擺放傢俱

需求 1.房子(House)有戶型,總面積和家居名稱列表
    新房子沒有任何傢俱
2.傢俱(HouseItem)有名字和佔地面積,其中
    席夢思(bed)佔地 4 平米
    衣櫃(chest)佔地 2 平米
    餐桌(table)佔地 1.5平米
3.將以三件傢俱添加到房子中
4.打印房子時,要求輸出:戶型、總面積、剩餘面積、家居名稱列表

剩餘面積 1.在建立房子對象時,定義一個剩餘面積的屬性、初始值和總面積相等
2.當調用 add_item 方法,向房間添加傢俱時,讓剩餘面積 -= 傢俱面積

應該先開發 傢俱類
1.傢俱簡單
2.房子要使用到傢俱,被使用的類,一般應該先開發

 

class HouseItem:
    def __init__(self,name,area):
        self.name = name
        self.area = area

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


class House:
    def __init__(self,house_type,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)

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

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

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

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

print(my_home)
小結 1.建立了一個房子類,使用到_init_和_str_兩個內置方法
2.準備了一個 add_item 方法準備添加家居
3.使用房子類建立了一個房子對象
4.讓房子對象調用了三次 add_item 方法,將三件家居以實參傳遞到 add_item內部

3.3 添加傢俱app

需求
1>判斷傢俱的面積是否超過剩餘面積,若是超過,提示不能添加這件家居
2>將傢俱的名稱追加到家居名稱列表中
3>用房子的剩餘面積 * 傢俱面積
class HouseItem:
    def __init__(self,name,area):
        self.name = name
        self.area = area

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


class House:
    def __init__(self,house_type,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)
        # 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

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

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

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

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

print(my_home)

3.4 小結spa

主程序只負責建立房子對象和加重對象code

讓房子對象調用 add_item方法將傢俱添加到房子中對象

面積計算、剩餘面積、傢俱列表等處理都被封裝到房子類的內部blog

相關文章
相關標籤/搜索