面向对象速查笔记(一)

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]
现有家具 ['床', '衣柜']