在上一篇文章中,已经有一个名为“小夏爱跑步”的面向对象封装案例。和这种布置家具的案例相比,就简单多了。知识点是回顾初始化方法__init__和__str__方法,拓展一个知识点——多个对象属性互不干扰。一、面向对象封装案例——家具需求分析需求:1、房屋(House)有户型、总面积、家具名称列表(1)新房没有任何家具。家具(HouseItem)具有名称和占地面积。(1)席梦思(床)占地4平方米(2)衣柜(柜)占地2.5平方米(3)餐桌(桌子)占地2平方米3.将以上三件家具添加到房屋中4.打印一个房屋,需要输出:房屋类型,总面积,剩余面积,家具名称列表分析:添加家具的方法应该定义在房屋类中,因为房子最初是没有家具的,使用添加家具的方法add_item(self,item)可以将家具参数item对应的家具名称添加到item_list列表中,这样每次调用该方法时,都会多出一件家具房子里的家具清单,所以要在房子里定义添加家具的方法。剩余面积:创建房屋对象时,定义剩余面积的属性。初始值等于总面积。在调用add_item方法给房子添加家具时,让剩余面积-=家具面积思考一个问题:有两个类,应该先开发哪个类?答:家具类原因:家具类的简易房类需要用到家具,通常先开发用过的类。否则,先开发房子类,然后不终止地开发那件家具代码,再转而开发家具类是不明智的。2.开发家具类,创建家具对象根据上图中的家具类,可以看出有2个形参,分别是家具名称和区号:classHouseItem:#初始化方法:Simplify对象的创建def__init__(self,name,area):#self.attribute=形参self.name=nameself.area=area#内置方法__str__(self):简化对象的输出def__str__(self):#这个方法需要注意的是它必须返回一个字符串#.2f表示遇到小数只保留2位小数return"[%s]占地面积.2f平方米"%(self.name,self.area)#1.创建家具objectbed=HouseItem("席梦思",4)chest=HouseItem("衣柜",2.5)table=HouseItem("餐桌",2)print(bed)print(chest)print(table)执行结果:3.定义house类在上面的代码中添加house类。看上面的图,我们可以看到house类中有四个属性,其中housetype和totalarea这两个参数应该是外界传递的,但是剩下的面积free_area呢?在没有任何家具的新房子中,剩余面积等于初始情况下的总面积,因此剩余面积不需要通过外部参数传递。第四个参数是item_list,家具名称列表。新房子一开始是没有家具的,一开始只是一个空列表,所以在准备参数的时候只需要准备两个形式参数,即house_type和area。代码:classHouseItem:#初始化方法:简化对象创建def__init__(self,name,area):#self.attribute=形参self.name=nameself.area=area#内置方法__str__(self):简化对象的输出def__str__(self):#这个方法需要注意的是必须返回一个字符串#.2f表示遇到小数只保留2位小数return"[%s]占地面积.2f平方米"%(self.name,self.area)classHouse():def__init__(self,house_type,area):self.house_type=house_typeself.area=area#剩余面积self.free_area=area#剩余面积初始值为Totalarea#家具名称列表self.item_list=[]#家具列表为开头为空列表def__str__(self):#Python小技巧:Python可以自动将一对括号内的代码无误地连接在一起,因为这里的代码处理使用了括号return("Housetype:%s\nTotalarea:%.2f[剩余面积:%.2f]\n家具:%s"%(self.house_type,self.area,self.free_area,self.item_list))#添加家具方法defadd_item(self,item):print("Toadd%s"%item)#1.创建家具对象bed=HouseItem("Simmons",4)chest=HouseItem("wardrobe"ot;,2.5)table=HouseItem("餐桌",2)print(bed)print(chest)print(table)#2.创建一个房子对象house1=House("两室一厅",80)#调用add方法,将所有家具添加到新房子house1.add_item(bed)house1.add_item(chest)house1.add_item(table)print(house1)执行结果:总结:1.创建了一个house类,使用__init___和_str__这两个内置方法2.准备了一个add-item方法来添加家具3.使用house类创建了一个house对象4.让house对象调用了3次addd_item方法,将三件家具作为实际参数到里面add_item4.改进代码——添加家具方法需求:判断家具的面积是否超过剩余面积。如果超过,会提示不能添加这件家具。将家具的名称添加到家具列表中。剩余面积=当前房屋剩余面积-家具面积(房屋剩余面积会随着每件家具的增加而变化)代码:classHouseItem:#初始化方法:简化对象创建def__init__(self,name,area):#自己。attribute=形参self.name=nameself.area=area#内置方法__str__(self):简化对象的输出def__str__(self):#这个方法需要注意,它必须返回一个字符串#.2f表示遇到小数只保留2小数返回"[%s]占地面积.2f平方米"%(self.name,self.area)classHouse():def__init__(self,house_type,area):self.house_type=house_typeself.area=area#剩余面积self.free_area=area#剩余面积初始值就是总面积#家具名称列表self.item_list=[]#家具列表开头为空列表def__str__(self):#Pythontips:Python可以自动将一对括号内的代码无误地连接在一起,因为代码过程,这里用括号return("房屋类型:%s\n总面积:%.2f[剩余面积:%.2f]\n家具:%s"%(self.house_type,self.area,self.free_area,self.item_list))#添加家具方法defadd_item(self,item):print("Toadd%s"%item)#1.判断家具面积ifitem.area>self.free_area:print("%s的面积太大,无法添加"%item.name)return#return关键字可以返回一个结果,也可以不返回,下面的代码不会执行#2.添加家具到家具列表self.item_list。append(item.name)#3.计算剩余面积self.free_area-=item.area#1.创建家具对象bed=HouseItem("Simmons",4)chest=HouseItem("wardrobe",2.5)table=HouseItem("餐桌",2)print(bed)print(chest)print(table)#2.创建一个房子对象house1=House("两室一厅",80)#调用add方法添加新房子的所有家具house1.add_item(bed)house1.add_item(chest)house1.add_item(table)print(house1)执行结果:总结:1.主程序只负责创建房屋对象和家具对象并调用方法2.让房屋对象调用add_item方法为房屋添加家具3.面积计算,remainingarea,furniturelist详细处理封装到房子类的室内。以上就是面向对象案例家具摆放的分析和代码演练。更多Python练习题,可以关注Python自学网,持续更新www.wakey.com.cn/
