zoukankan      html  css  js  c++  java
  • Python

    需求

    • 房子(House)有户型、总面积、家具名称列表;新房子没有任何的家具 
    • 家具(HouseItem)有名字、占地面积
    • 席梦思(bed) 占地 4 平米
    • 衣柜(bed) 占地 2 平米
    • 餐桌(bed) 占地 1.5 平米
    • 将以上三个家具添加到房子中
    • 打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表

    需求分析

    • 家具有两个属性,房子表面上有三个属性
    • 新房子没有任何的家具,代表构造方法不需要给家具名称列表属性初始化赋值
    • 但房子其实还有一个特殊属性,剩余面积,它的初始值应该和总面积相同
    • 房子添加家具后,剩余面积应该减掉家具的占地面积
    • 席梦思、衣柜、餐桌都是一个具体的对象,都是家具类的实例对象

    思考:房子、家具两个类应该先开发哪个类

    • 家具类
    • 因为家具类简单,只有两个方法,且没有行为
    • 房子要使用到家具,被依赖的类,通常应该先开发,可以避免在开发主类过程中,要中途插入开发被依赖的类

    类图

    实现代码

    家具类

    class HouseItem:
        # 构造方法
        def __init__(self, name, area):
            self.name = name
            self.area = area
    
        def __str__(self):
            return f"家具名称:{self.name} 占地面积:{self.area}"

    房子类

    class House:
        # 构造方法
        def __init__(self, type, area):
            self.house_type = type
            self.area = area
            # 剩余面积
            self.free_area = self.area
            # 家具名称列表
            self.item_list = []
    
        # str
        def __str__(self):
            return f"户型:{self.house_type}
    " 
                   f"总面积:{self.area}
    " 
                   f"剩余面积:{self.free_area}
    " 
                   f"家具:{self.item_list}
    "
    
        # 添加家具
        def add_item(self, item):
            # 1、家具占地面积>剩余面积
            if item.area > self.free_area:
                print("剩余面积不足以添加 ", item.name)
                return
            # 2、添加家具名称
            self.item_list.append(item.name)
            # 3、计算剩余面积
            self.free_area -= item.area

    执行代码

    # 创建三个家具
    bed = HouseItem("席梦思", 4)
    chest = HouseItem("衣柜", 2)
    table = HouseItem("餐桌", 1.5)
    
    # 创建房子实例对象
    poloHouse = House("120平复试", 120)
    # 添加家具
    poloHouse.add_item(bed)
    poloHouse.add_item(chest)
    poloHouse.add_item(table)
    # 打印房子信息
    print(poloHouse)
    
    
    # 输出结果
    户型:120平复试
    总面积:120
    剩余面积:112.5
    家具:['席梦思', '衣柜', '餐桌']
  • 相关阅读:
    js动态创建table表格的四种方法和性能测试(转载)
    render用法汇总(转载)
    echarts 解决 X轴与Y轴数据不对应问题;X轴日期显示顺序错误问题
    数组对象按时间字符串排序(转载)
    SQL Server 取日期时间部分(转载)
    iview Table行编辑、单元格编辑(转载)
    使用C#创建Windows服务
    马士兵-synchronized
    小程序登录笔记
    Prometheus+Grafana 的方法监控 Springboot 应用
  • 原文地址:https://www.cnblogs.com/poloyy/p/15204079.html
Copyright © 2011-2022 走看看