1. 程式人生 > >python -封裝

python -封裝

封裝
1.封裝是面向物件程式設計的一大特點
2.面向物件程式設計的第一步 將屬性和方法封裝到一個抽象的類中(為什麼說是抽象的,因為類不能直接使用)
3.外界使用類建立物件,然後讓物件呼叫方法
4.物件方法的細節都被封裝在類的內部

需求1:
1.小明和小美都愛跑步
2.小美體重45.0公斤
3.小明體重75.0公斤
4.每次跑步都會減少0.5公斤
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.0)
xiaoming.run()
xiaoming.eat()
#print(xiaoming.weight)
print(xiaoming)


# 同一個類創建出多個物件之間,屬性互補干擾的
xiaomei = Person('小美',45.0)
xiaomei.run()
xiaomei.eat()
print(xiaomei)
print(xiaoming)

在這裡插入圖片描述
需求2:擺放傢俱
需求:
1.房子有戶型,總面積和傢俱名稱列表
新房子沒有任何的傢俱
2.傢俱有名字和戰地面積,其中
床:佔4平米
衣櫃:佔2平面
餐桌:佔1.5平米
3.將以上三件傢俱新增到房子中
4.列印房子時,要求輸出:戶型,總面積,剩餘面積,傢俱名稱列表

分為兩類:傢俱類、房子類
房子類要使用傢俱,所以被使用的類應先開發

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):
        return ('戶型:%s 總面積:%.2f 剩餘面積:%.2f 傢俱列表:%s'
                %(self.house_type,self.area,self.free_area,self.item_list))

    def add_item(self,item):
        # item 就是傢俱
        # 1.判斷傢俱的面積
        if item.area> self.free_area:
            print('傢俱面積太大了')
            return
            # 想要if直接結束程式 用return
        # 2.將傢俱名稱新增到列表中
        self.item_list.append(item.name)
        # 3. 計算剩餘面積
        self.free_area -= item.area



bed = HouseItem('bed',4)
# print(bed)
chest = HouseItem('chest',2)
table = HouseItem('table',1.5)

a = House('三室兩廳',123)
a.add_item(bed)
a.add_item(chest)
a.add_item(table)
print(a)

在這裡插入圖片描述