目录

1.  封装

2. 实例一-----小明爱跑步

2.1 需求

2.2 分析

2.3 代码编写

3. 实例二—小明和小美都爱跑步

3.1 需求

3.2 代码编写

4.  摆放家具

4.1 需求

4.2 分析

4.3 代码编写

4.3.1 创建家具类

4.3.2 创建房子类

4.3.3 添加家具


1.  封装

  1. 封装 是面向对象编程的一大特点

  2. 面向对象编程的 第一步 ---- 将 属性 和 方法 封装 到一个抽象的 类 

  3. 外界 使用 类 创建 对象,  然后 让对象调用方法

  4. 对象方法的细节 都被 封装 在 类的内部

2. 实例一-----小明爱跑步

2.1 需求

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

2.2 分析

类 = > Person

属性 = > name , height

方法 = > run( ) , eat( )

2.3 代码编写

class Person:def __init__(self, name, height):# self.属性 = 形参self.name = nameself.height = heightdef __str__(self):return "我的名字叫 %s 体重是 %.2f 公斤" % (self.name, self.height)def run(self):print("%s 爱跑步, 跑步锻炼身体" % self.name)self.height -= 0.5def eat(self):print("%s 喜欢吃东西, 吃东西好快乐" % self.name)self.height += 1xiaoming = Person("小明", 70)xiaoming.run()
xiaoming.eat()print(xiaoming)

3. 实例二—小明和小美都爱跑步

3.1 需求

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

3.2 代码编写

class Person:def __init__(self, name, height):# self.属性 = 形参self.name = nameself.height = heightdef __str__(self):return "我的名字叫 %s 体重是 %.2f 公斤" % (self.name, self.height)def run(self):print("%s 爱跑步, 跑步锻炼身体" % self.name)self.height -= 0.5def eat(self):print("%s 喜欢吃东西, 吃东西好快乐" % self.name)self.height += 1xiaoming = Person("小明", 70)
xiaoming.run()
xiaoming.eat()print(xiaoming)# 小美爱跑步
xiaomei = Person("小美", 45)
xiaomei.eat()
xiaomei.run()print(xiaomei)

4.  摆放家具

4.1 需求

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

  • 新房子没有任何的家具

2.  家具(HouseItem) 有 名字 和 占地面积,  其中

  • 席梦思(bed) 占地 4 平米
  • 衣柜(chest) 占地 2 平米
  • 餐桌(table) 占地 1.5 平米

3.  将以上三件 家具 添加 到 房子 中

4.  打印房子时,  要求输出: 户型, 总面积, 剩余面积, 家具名称列表

4.2 分析

类 : 房子类(House)                                                              类 : 家具类(HouseItem)

属性: house_type, area,free_area, item_list                       属性: name,  area

方法:add_item

先创建家具类,再创建房子类(以免无法编写添加家具这个方法)

4.3 代码编写

4.3.1 创建家具类

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

4.3.2 创建房子类

class HouseItem:def __init__(self,name,area):self.name = nameself.area = areadef __str__(self):return "%s 占地%0.2f" % (self.name,self.area)class House:def __init__(self,hose_type,area):self.house_type = hose_typeself.area = area# 剩余面积self.free_area = area# 家具名称列表self.item_list = []def __str__(self):# Python 能够自动的将一对括号内部代码连接在一起return ("户型:%s\n总面积: %0.2f[剩余:%0.2f]\n家具: %s"% (self.house_type,self.area,self.free_area,self.item_list))def add_item(self,item):print("要添加 %s" % item)# 1.创建家具
bed = HouseItem("席梦思",4)
chest = HouseItem("衣柜",2)
table = HouseItem("餐桌",1.5)
# 2.创建房子类型
my_home = House("两室一厅",60)my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)
print(my_home)

小结:

  • 创建了一个 房子类,  使用到 __init__ 和 __str__两个内置方法
  • 准备了一个 add_item 方法 准备添加家具
  • 使用 房子类 创建 一个房子对象
  • 让 房子对象 调用了三次 add_item 方法,  将 三件家具 以实参传递到 add_item 内部

4.3.3 添加家具

  1. 判断 家具的面积 是否 超过剩余面积,  如果超过,  提示不能添加这件家具
  2. 将 家具的名称 追加到 家具名称列表 中
  3. 用 房子的剩余面积 -- 家具面积
class HouseItem:def __init__(self,name,area):self.name = nameself.area = areadef __str__(self):return "%s 占地%0.2f" % (self.name,self.area)class House:def __init__(self,hose_type,area):self.house_type = hose_typeself.area = area# 剩余面积self.free_area = area# 家具名称列表self.item_list = []def __str__(self):# Python 能够自动的将一对括号内部代码连接在一起return ("户型:%s\n总面积: %0.2f[剩余:%0.2f]\n家具: %s"% (self.house_type,self.area,self.free_area,self.item_list))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# 1.创建家具
bed = HouseItem("席梦思",6)
chest = HouseItem("衣柜",2)
table = HouseItem("餐桌",1.5)
# 2.创建房子类型
my_home = House("两室一厅",60)
# 3. 添加家具
my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)print(my_home)

总结:

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

23_Python基础_面向对象封装案例(一)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 七分结构三分代码-直立车想节能
  2. rqnoj 496 [IOI1999]花店橱窗布置 (简单dp)
  3. Java实现插入排序及其优化 Shell Sort
  4. 【WebRTC---入门篇】(一)WebRTC整体架构
  5. 数据科学基础_学习数据科学基础
  6. glide 加载webp_如何使您的网站通过WebP图像快速加载闪电
  7. Flume案例Ganglia监控
  8. 科研|我最煎熬的学术时刻,是耗时3年完成了一篇论文
  9. Gradle-jar-aar
  10. 关于我在安装2.6.9版本bochs虚拟机时遇到的问题以及解决过程
  11. Eclipse设置护眼背景
  12. 并发编程 - io模型 - 总结
  13. Hadoop安装详细教程 单机版
  14. mysql 5.0卸载_卸载MySQL 5.0
  15. VS2015 还是VS2017 好用_如何卸载清理vs2017前vs2015,vs2013等版本
  16. 双基因突变患者_我的肺癌没有基因突变,这是好是坏?
  17. ceph的数据存储之路(7) -----PG 的状态机和peering过程
  18. 关于移动H3_2s光猫获得超级密码的步骤以及上传本地配置文件覆盖光猫的配置文件的方法
  19. PowerManagerService分析(二)之updatePowerStateLocked()核心
  20. 【Codeforces】1635E Cars 题解

热门文章

  1. 2022医药投融资数据库--投行必备
  2. Solidity语言学习——(五)
  3. Go 结构体指针初始化
  4. JPA Buddy指南
  5. 基于tkinter的随机抽奖程序(每天一个python小项目)
  6. 投票理论简介以及机器学习中的投票规则
  7. phpstudy的安装
  8. 百望云亮相Inno China中国产业创新大会 赋能金融数据智能创新
  9. 江工网:公务员辞职后几年禁考
  10. before 和after的用法