本案例設計的是:為購置的新房添置家具
,在本案例中,我們需要給出指定的房屋和面積,在為其添置家具的過程中,各家具的面積之和不能超過房屋面積的總和。房屋及家具的面積需要由使用者手動輸入,也可以自定義增加房屋選項或家具選項。
#房子要使用到家具,被使用的類通常先開發
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
#只要return執行,下發**就不會繼續執行
#2.將家具的名稱新增到列表中
#3.計算剩餘面積
self.free_area-=item.area
#1.建立家具
bed=houseitem(
'席夢思',50
)chest = houseitem(
'衣櫃',60
)table = houseitem(
'餐桌',20
)# print(bed)
# print(chest)
# print(table)
#2.建立房子物件
my_home = house(
"兩室一廳"
,100
)my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)
print
(my_home)
輸出結果:
要新增[席夢思] 占地 50.00
要新增[衣櫃] 占地 60.00
衣櫃的面積太大了,無法新增
要新增[餐桌] 占地 20.00
戶型:兩室一廳
總面積:100.00[剩餘:30.00]
家具:[
'席夢思'
,'餐桌'
]
本案例需要設計兩個類,分別為家具類houseitem
、房屋類house
。
在這兩個類的定義過程中需要用到使用__init__
和__str__
方法:
用__init__
方法定義房屋和家具的屬性,用__str__
定義房屋和家具返回的資訊。
家具只需定義名稱及面積即可。
在房屋中還需要新增的乙個重要方法就是添置家具,可以理解為給房屋指定具有添置家具的行為,這裡以例項方法的形式構造了add_item
函式,在此函式中,只需要傳遞家具物件的名稱進來,而在函式中,首先要呼叫家具的面積與房屋的剩餘面積,二者進行比較,當家具面積小於房屋面積時可以進行新增,並同時在房屋剩餘面積上減去已新增的家具面積,然後再將家具的名稱新增到房屋物件的已選擇的家具屬性中。
最後使用者通過建立房屋和家具的物件來實現例項,並給出需要新增的家具,輸出結果之後結束程式。
python物件導向程式設計 類和例項化
物件導向程式設計有三大特徵 封裝,繼承,多型 封裝 讓 有了的完整性,把客觀的現實中存在的事物抽象成計算機中的物件 好處 將變化隔離 便於使用 提高復用性 提高安全性 繼承 物件導向的乙個重要特性是復用性.繼承是實現復用性的乙個重要手段.可以在不重複編寫以實現的功能的前提下,對功能進行復用和拓展.繼...
python 物件導向程式設計
新式類 class mynewobjecttype bases define mynewobjecttype class class suite經典類 沒有指定乙個父類,或者子類化的基本類沒有父類,就建立了乙個經典類 class mynewobjecttype define mynewobjectt...
Python物件導向程式設計
class mynewobjecttype bases define mynewobjecttype class class suite例項化 myfirstobject mynewobjecttype class mydatawithmethod object defprintfoo self p...