面向对象速查笔记(一)
Published on 2018 - 01 - 09
需求:
1.房子(House)有户型
、总面积
和家具名称列表
新房子没有任何的家具`
2.家具(Jiaju)有名字
和占地面积
,其中:
床(bed)占地15平米
衣柜(chest)占地3平米
3.将以上两件家具添加
到房子
中
4.打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表
class JiaJu:
"""
创建一个家具的类,使用参数传入初始值(家具名,占地面积)
"""
def __init__(self, name, area):
self.name = name
self.area = area
def __str__(self):
"""
如果不加str方法,print就会打印内存地址,
加了之后会打印出return后面的内容
"""
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 \n总面积: %.2f[剩余 %.2f]\n现有家具 %s"
% (self.house_type, self.area,
self.free_area, self.item_list))
def add_item(self, item):
"""
添加家具的Function,
:param item: 之所以item前面没有self,是因为item是家具类中的参数,
在家具类中已经是self,所以传到房屋的类中,已经是带有self
的参数了。
"""
print("要添加 %s" % item)
#判断家具面积
if item.area > self.free_area:
print("%s 的面积超出了房屋剩余面积" % item.name)
return
#将家具名称添加到列表
self.item_list.append(item.name)
#计算剩余面积
self.free_area -= item.area
开始创建对象,并使用
bed = JiaJu("床", 15)
chest = JiaJu("衣柜", 3)
my_home = House("别墅", 120)
my_home.add_item(bed)
my_home.add_item(chest)
print(my_home)
运行结果
要添加 [床] 占地 15.00
要添加 [衣柜] 占地 3.00
户型: 别墅
总面积: 120.00[剩余 102.00]
现有家具 ['床', '衣柜']
如果添加的家具超出范围,也会进行相应的报错,
并再次输出当前房屋的信息。
代码:
bed = JiaJu("床", 15)
chest = JiaJu("衣柜", 3)
over_size = JiaJu("浴缸", 200)
my_home = House("别墅", 120)
my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(over_size)
print(my_home)
输出:
要添加 [床] 占地 15.00
要添加 [衣柜] 占地 3.00
要添加 [浴缸] 占地 200.00
浴缸 的面积超出了房屋剩余面积
户型: 别墅
总面积: 120.00[剩余 102.00]
现有家具 ['床', '衣柜']