需求

  • 房子(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}\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

执行代码

# 创建三个家具
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
家具:['席梦思', '衣柜', '餐桌']

Python - 面向对象编程 - 小实战(3)的更多相关文章

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

    题目 设计一个类Person,生成若干实例,在终端输出如下信息 小明,10岁,男,上山去砍柴 小明,10岁,男,开车去东北 小明,10岁,男,最爱大保健 老李,90岁,男,上山去砍柴 老李,90岁,男 ...

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

    需求 小明和小美都爱跑步 小明体重 75 公斤 小美体重 45 公斤 每次跑步会减肥 0.5 公斤 每次吃东西体重增加 1 公斤 需求分析 小明.小美都是一个具体的对象,他们都是人,所以应该抽象成人类 ...

  3. python 面向对象编程 - 小游戏

    面向对象写的小游戏 欢迎玩耍 class Omnicience: camp = 'Omniscience' def __init__(self, name, atk=100, hp=1000, mp= ...

  4. python面向对象编程小程序- 选课系统

    选课系统 花了一晚上写的,可能还存在不足 1.程序框架 2.文件夹建立 D:/选课系统 |___api | |___common_api.py |___bil | |___common.py |___ ...

  5. python面向对象编程进阶

    python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...

  6. Python 面向对象编程 继承 和多态

    Python 面向对象编程 继承 和多态 一:多继承性 对于java我们熟悉的是一个类只能继承一个父类:但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲 格式: c ...

  7. Python 面向对象编程基础

    Python 面向对象编程基础 虽然Pthon是解释性语言,但是Pthon可以进行面向对象开发,小到 脚本程序,大到3D游戏,Python都可以做到. 一类: 语法: class 类名: 类属性,方法 ...

  8. python面向对象编程学习

    python面向对象编程 基本概念理解 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作 ...

  9. 图解python | 面向对象编程

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/56 本文地址:http://www.showmeai.tech/article-det ...

随机推荐

  1. Git常用命令和基础使用

    Git 参考:廖雪峰的Git教程 Git 常用命令 git config --global user.name "name" #配置git使用用户 git config --glo ...

  2. 剑指 Offer 32 - II. 从上到下打印二叉树 II

    剑指 Offer 32 - II. 从上到下打印二叉树 II 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,1 ...

  3. 数据库之 MySQL

    MySQL简单入门 数据库这个概念想必大家都听说过,我在这里也简单介绍一下. 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库.每个数据库都有一个或多个不同的 API 用于创建,访 ...

  4. Docker与k8s的恩怨情仇(八)——蓦然回首总览Kubernetes

    在系统介绍了如何实际部署一个K8S项目后,作为本系列文章的最后一篇,我们一起来看看Kubernetes集群内容总览,再对一些更深层次的功能进行总结. Kubernetes总览 下图是一个k8s的总览结 ...

  5. IDM-下载工具

    下载所需要的工具 1.IDM下载地址 链接:https://pan.baidu.com/s/1bHXA0pUYBOAC5f_2Iqvl_g 提取码:lsha 2.IDM破解包下载地址 链接:https ...

  6. Mybatis-Plus入门学习笔记(一)

    本文内容 了解Mybatis-Plus 整合Mybatis-Plus 1.了解Mybatis-plus 1.1.Mybatis-Plus介绍 MyBatis-Plus(简称 MP)是一个 MyBati ...

  7. docker 安装部署 redis(配置文件启动)

    获取 redis 镜像 docker pull redis:4.0.12 docker images 创建容器 创建宿主机 redis 容器的数据和配置文件目录 # 创建宿主机 redis 容器的数据 ...

  8. npm常用命令及其node相关工具汇总

    它是一个事件驱动异步I/O单进程的服务端JS环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好. 浏览器是JS的前端运行环境. Node.js是JS的后端运行环 ...

  9. 详解 OpenGL ES 2.x 渲染流程

    khronos官方对OpenGL ES的描述如下: OpenGL ES is a royalty-free, cross-platform API for rendering advanced 2D ...

  10. c# – RichTextBox用表情符号/图像替换字符串

    在RichtTextBox中,我想用表情符号图像自动替换表情符号字符串(例如:D).我到目前为止工作,除了当我在现有的单词/字符串之间写出表情符号字符串时,图像会在行尾插入. 例如:你好(在这里插入: ...