首先我们要搞清楚摆放家具有哪些需求?房子(House)有户型、总面积和家具名称列表新房子刚开始没有任何的家具
2.家具(HouseItem)有名字和占地面积,其中席梦思(bed)占地5平米
电视柜(tvtable)占地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)
bed=HouseItem("席梦思",5)
tvtable=HouseItem("电视柜",2)
table=HouseItem("餐桌",1.5)
定义房子类
在定义房子的属性的时候,我们只需要定义户型和总面积,因为剩余面积起始值就相当于总面积,房子中的家具其实也为空列表,不需要定义。
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("席梦思",5)
tvtable=HouseItem("电视柜",2)
table=HouseItem("餐桌",1.5)
print(bed)
print(tvtable)
print(table)
# 2.创建房子的对象
house=House("小居室",80)
house.add_item(bed)
house.add_item(tvtable)
house.add_item(table)
print(house)
小结
主程序只负责创建房子对象和家具对象
让房子对象调用add_item方法将家具添加到房子中
面积计算,剩余面积,家具列表等处理都被封装到房子类的内部