面向对象封装案例

目标

  • 封装
  • 小明爱跑步
  • 存放家具

01. 封装

  1. 封装 是面向对象编程的一大特点
  2. 面向对象编程的 第一步 —— 将 属性方法 封装 到一个抽象的
  3. 外界 使用 创建 对象,然后 让对象调用方法
  4. 对象方法的细节 都被 封装类的内部

02. 小明爱跑步

需求

  1. 小明 体重 75.0 公斤
  2. 小明每次 跑步 会减肥 0.5 公斤
  3. 小明每次 吃东西 体重增加 1 公斤

提示:在 对象的方法内部,是可以 直接访问对象的属性 的!

  • 代码实现:
class Person:"""人类"""def __init__(self, name, weight):self.name = nameself.weight = weightdef __str__(self):return "我的名字叫 %s 体重 %.2f 公斤" % (self.name, self.weight)def run(self):"""跑步"""print("%s 爱跑步,跑步锻炼身体" % self.name)self.weight -= 0.5def eat(self):"""吃东西"""print("%s 是吃货,吃完这顿再减肥" % self.name)self.weight += 1xiaoming = Person("小明", 75)xiaoming.run()
xiaoming.eat()
xiaoming.eat()print(xiaoming)

2.1 小明爱跑步扩展 —— 小美也爱跑步

需求

  1. 小明小美 都爱跑步
  2. 小明 体重 75.0 公斤
  3. 小美 体重 45.0 公斤
  4. 每次 跑步 都会减少 0.5 公斤
  5. 每次 吃东西 都会增加 1 公斤

提示

  1. 对象的方法内部,是可以 直接访问对象的属性
  2. 同一个类 创建的 多个对象 之间,属性 互不干扰!

03. 摆放家具

需求

  1. 房子(House)户型总面积家具名称列表

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

剩余面积

  1. 在创建房子对象时,定义一个 剩余面积的属性初始值和总面积相等
  2. 当调用 add_item 方法,向房间 添加家具 时,让 剩余面积 -= 家具面积

思考:应该先开发哪一个类?

答案 —— 家具类

  1. 家具简单
  2. 房子要使用到家具,被使用的类,通常应该先开发

3.1 创建家具

class HouseItem:def __init__(self, name, area):""":param name: 家具名称:param area: 占地面积"""self.name = nameself.area = areadef __str__(self):return "[%s] 占地面积 %.2f" % (self.name, self.area)# 1. 创建家具
bed = HouseItem("席梦思", 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 1.5)print(bed)
print(chest)
print(table)

小结

  1. 创建了一个 家具类,使用到 __init____str__ 两个内置方法
  2. 使用 家具类 创建了 三个家具对象,并且 输出家具信息

3.2 创建房间

class House:def __init__(self, house_type, area):""":param house_type: 户型:param area: 总面积"""self.house_type = house_typeself.area = area# 剩余面积默认和总面积一致self.free_area = area# 默认没有任何的家具self.item_list = []def __str__(self):# Python 能够自动的将一对括号内部的代码连接在一起return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s"% (self.house_type, self.area,self.free_area, self.item_list))def add_item(self, item):print("要添加 %s" % item)...# 2. 创建房子对象
my_home = House("两室一厅", 60)my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)print(my_home)

小结

  1. 创建了一个 房子类,使用到 __init____str__ 两个内置方法
  2. 准备了一个 add_item 方法 准备添加家具
  3. 使用 房子类 创建了 一个房子对象
  4. 房子对象 调用了三次 add_item 方法,将 三件家具 以实参传递到 add_item 内部

3.3 添加家具

需求

  • 1> 判断 家具的面积 是否 超过剩余面积如果超过,提示不能添加这件家具
  • 2> 将 家具的名称 追加到 家具名称列表
  • 3> 用 房子的剩余面积 - 家具面积
    def add_item(self, item):print("要添加 %s" % item)# 1. 判断家具面积是否大于剩余面积if item.area > self.free_area:print("%s 的面积太大,不能添加到房子中" % item.name)return# 2. 将家具的名称追加到名称列表中self.item_list.append(item.name)# 3. 计算剩余面积self.free_area -= item.area

3.4 小结

  • 主程序只负责创建 房子 对象和 家具 对象
  • 房子 对象调用 add_item 方法 将家具添加到房子
  • 面积计算剩余面积家具列表 等处理都被 封装房子类的内部

21python_面向对象封装案例相关推荐

  1. python-面向对象-05_面向对象封装案例 II

    面向对象封装案例 II 目标 士兵突击案例 身份运算符 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 -- 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象, ...

  2. Python之 面向对象封装案例

    面向对象封装案例 目标 封装 小明爱跑步 存放家具 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 -- 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象,然后 ...

  3. 【面向对象学习笔记day05】面向对象封装案例2+士兵突击+开发枪类+开发士兵类+身份运算符+is 与 == 区别

    面向对象封装案例 II 文章目录 面向对象封装案例 II 目标 01. 士兵突击 1.1 开发枪类 1.2 开发士兵类 02. 身份运算符 is 与 == 区别: 目标 士兵突击案例 身份运算符 封装 ...

  4. 「Python」面向对象封装案例3——士兵突击(需求分析、代码演练)

    分装: 封装是面向对象编程的一大特点 面向对象编程的第一步:将属性和方法分装到一个抽象的类中 外界使用类创建对象,然后让对象调用方法 对象方法的细节都被封装在累的内部 注意:一个对象的属性可以是另外一 ...

  5. python面向对象_05(面向对象封装案例 II)

    面向对象封装案例 II 目标 士兵突击案例 身份运算符 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 -- 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象, ...

  6. Python中面向对象封装案例——小明爱跑步、摆放家具

    文章目录 面向对象封装案例 目标 1. 封装 2. 小明爱跑步 2.1 小明爱跑步扩展 -- 小美也爱跑步 3. 摆放家具 3.1 创建家具 3.2 创建房间 3.3 添加家具 3.4 小结 面向对象 ...

  7. Python面向对象封装案例——士兵突击

    面向对象封装案例 II 目标 士兵突击案例 身份运算符 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 -- 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象, ...

  8. 【Python基础】面向对象封装 案例(一)

    目录 面向对象封装案例 1.案例一(简单) 2.案例二(一个类的对象(创建后所自动执行的_ _str_ _()方法) 充当 另一个类de对象所调用的方法中的参数) 1.初步开发 家具类 HouseIt ...

  9. 【Python基础】面向对象封装 案例(二)

    目录 案例二 1.首先开发 枪类 2.接着开发 士兵类 3.开发 开火类. 案例一在这里: [Python基础]面向对象封装 案例(一) 案例二 仍然是一步一步开发.同时,下面的第3小步是完整代码,亦 ...

最新文章

  1. evaluate函数使用无效_[Python实战]使用栈实现简易计算器
  2. Facebook市值赶超股神巴菲特公司 全美排名第五
  3. 有条件忽略测试的JUnit规则
  4. Java中的继承:父类和子类的关系
  5. 获取客户端登录ip地址
  6. 在使用体验上,VS远远不如Eclipse
  7. 龙芯指令集也可以开源
  8. php页面源代码怎么优化,php代码优化及php相关问题总结
  9. 来JavaEye两年了
  10. 判断题 错与对的 t、f 是什么意思
  11. 名编辑电子杂志大师教程 | 如何打开名编辑电子杂志大师帮助文档?
  12. codeforces 2022.11.22-11.29
  13. 交换机简单配置 SSH
  14. 自动翻译软件-批量批量自动翻译软件推荐
  15. linux和windwos下的磁盘扇区数据查看
  16. Masonry 布局tag标签(4343排列)
  17. 全自动真空脱气机与定压补水脱气机组 真空脱气机的区别
  18. 短视频质量提升(包装)——Ins风格漫画特效短视频特效模板
  19. 计算机纸牌游戏在哪,开始菜单里的纸牌游戏没有了~~在哪里能够找 – 手机爱问...
  20. 音频切歌消除POP声或者噪音算法,淡入淡出算法

热门文章

  1. JavaScript类型转换整理
  2. C语言基本数据:实型
  3. Android(ButterKnife)黄油刀使用详解
  4. Navicat Premium教程:如何使用 Navicat 远程管理数据库?
  5. 沃通“SSL证书+代码签名证书”,防范高仿“钓鱼网站+钓鱼软件”攻击
  6. 【Linux】yum相关 - 制作本地yum源
  7. [书籍]重温《Framework Design Guidelines》
  8. v80八核 android6,高通发布骁龙810八核/808六核64位芯片
  9. php 下拉框默认选中,select标签设置默认选中的选项方法,select标签
  10. linux目录命令改目录名,Linux命令详解——文件和目录常用命令-linux修改文件名...