前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python - 面向对象编程 - 小实战(3)

Python - 面向对象编程 - 小实战(3)

作者头像
小菠萝测试笔记
发布2021-09-07 16:33:31
2880
发布2021-09-07 16:33:31
举报

需求

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

需求分析

  • 家具有两个属性,房子表面上有三个属性
  • 新房子没有任何的家具,代表构造方法不需要给家具名称列表属性初始化赋值
  • 但房子其实还有一个特殊属性,剩余面积,它的初始值应该和总面积相同
  • 房子添加家具后,剩余面积应该减掉家具的占地面积
  • 席梦思、衣柜、餐桌都是一个具体的对象,都是家具类的实例对象
思考:房子、家具两个类应该先开发哪个类
  • 家具类
  • 因为家具类简单,只有两个方法,且没有行为
  • 房子要使用到家具,被依赖的类,通常应该先开发,可以避免在开发主类过程中,要中途插入开发被依赖的类

类图

实现代码

家具类
代码语言:javascript
复制
class HouseItem:
    # 构造方法
    def __init__(self, name, area):
        self.name = name
        self.area = area

    def __str__(self):
        return f"家具名称:{self.name} 占地面积:{self.area}"
房子类
代码语言:javascript
复制
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}\n" \
               f"总面积:{self.area}\n" \
               f"剩余面积:{self.free_area}\n" \
               f"家具:{self.item_list}\n"

    # 添加家具
    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
执行代码
代码语言:javascript
复制
# 创建三个家具
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
家具:['席梦思', '衣柜', '餐桌']
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求
  • 需求分析
    • 思考:房子、家具两个类应该先开发哪个类
    • 类图
    • 实现代码
      • 家具类
        • 房子类
          • 执行代码
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档