博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
11面向对象封装案例
阅读量:6294 次
发布时间:2019-06-22

本文共 4712 字,大约阅读时间需要 15 分钟。

1. 封装

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

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

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

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

2. 小明爱跑步

需求

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

类 = > Person

属性 = > name , height

方法 = > run( ) , eat( )

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

1 class Person: 2  3     def __init__(self, name, height): 4  5         # self.属性 = 形参 6         self.name = name 7         self.height = height 8  9     def __str__(self):10 11         return "我的名字叫 %s 体重是 %.2f 公斤" % (self.name, self.height)12 13     def run(self):14         print("%s 爱跑步, 跑步锻炼身体" % self.name)15         self.height -= 0.516 17     def eat(self):18         print("%s 喜欢吃东西, 吃东西好快乐" % self.name)19         self.height += 120 21 22 xiaoming = Person("小明", 70)23 24 xiaoming.run()25 xiaoming.eat()26 27 print(xiaoming)

3. 小明爱跑步 ---- 小美也爱跑步

需求

  1. 小明 和 小美 都爱跑步
  2. 小明 体重 75.0 公斤
  3. 小美 体重 45 公斤
  4. 每次 跑步 都会减少 0.5 公斤
  5. 每次 吃东西 都会增加 1 公斤
1 class Person: 2  3     def __init__(self, name, height): 4  5         # self.属性 = 形参 6         self.name = name 7         self.height = height 8  9     def __str__(self):10 11         return "我的名字叫 %s 体重是 %.2f 公斤" % (self.name, self.height)12 13     def run(self):14         print("%s 爱跑步, 跑步锻炼身体" % self.name)15         self.height -= 0.516 17     def eat(self):18         print("%s 喜欢吃东西, 吃东西好快乐" % self.name)19         self.height += 120 21 22 xiaoming = Person("小明", 70)23 24 xiaoming.run()25 xiaoming.eat()26 27 print(xiaoming)28 29 # 小美爱跑步30 xiaomei = Person("小美", 45)31 32 xiaomei.eat()33 xiaomei.run()34 35 print(xiaomei)36 print(xiaoming)
  1. 对象的方法内部, 是可以 直接访问对象的属性
  2. 同一个类 创建的 多个对象 之间, 属性 互不干扰!

4. 摆放家具

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

  • 新房子没有任何的家具

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

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

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

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

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

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

方法:add_item

剩余面积

1. 在创建房子对象时, 定义一个 剩余面积的属性, 初始值和总面积相等

2. 当调用 add_item 方法, 向房间 添加家具 时, 让 剩余面积 -= 家具面积

1 class HouseItem: 2  3     def __init__(self, name, area): 4  5         self.name = name 6         self.area = area 7  8     def __str__(self): 9 10         return "[%s] 占地 %.2f" % (self.name, self.area)11 12 13 class House:14 15     def __init__(self, house_type, area):16         self.house_type = house_type17         self.area = area18 19         # 剩余面积20         self.free_area = area21 22         # 家具名称列表23         self.item_list = []24 25     def __str__(self):26         return ("户型: %s\n总面积: %.2f[剩余: %.2f]\n家具: %s"27                 % (self.house_type, self.area,28                    self.free_area, self.item_list))29 30     def add_item(self, item):31 32         print("要添加 %s" % item)33 34 35 # 创建家具36 bed = HouseItem("席梦思", 4)37 chest = HouseItem("衣柜", 2)38 table = HouseItem("餐桌", 1.5)39 40 41 print(bed)42 print(chest)43 print(table)44 45 # 创建房子46 my_home = House("三室两厅", 130)47 48 print(my_home)49 my_home.add_item(bed)50 my_home.add_item(chest)51 my_home.add_item(table)

小结

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

4.1 添加家具

  1. 判断 家具的面积 是否 超过剩余面积, 如果超过, 提示不能添加这件家具
  2. 家具的名称 追加到 家具名称列表
  3. 房子的剩余面积 -- 家具面积
1 class HouseItem: 2  3     def __init__(self, name, area): 4  5         self.name = name 6         self.area = area 7  8     def __str__(self): 9 10         return "[%s] 占地 %.2f" % (self.name, self.area)11 12 13 class House:14 15     def __init__(self, house_type, area):16         self.house_type = house_type17         self.area = area18 19         # 剩余面积20         self.free_area = area21 22         # 家具名称列表23         self.item_list = []24 25     def __str__(self):26         return ("户型: %s\n总面积: %.2f[剩余: %.2f]\n家具: %s"27                 % (self.house_type, self.area,28                    self.free_area, self.item_list))29 30     def add_item(self, item):31 32         print("要添加 %s" % item)33         # 1. 判断家具的面积34         if item.area > self.free_area:35             print("%s 的面积太大了, 无法添加" % item.name)36             return37         # 2. 将家具的名称添加到列表中38         self.item_list.append(item.name)39         # 3. 计算剩余面积40         self.free_area -= item.area41 42 43 # 创建家具44 bed = HouseItem("席梦思", 4)45 chest = HouseItem("衣柜", 2)46 table = HouseItem("餐桌", 1.5)47 48 49 print(bed)50 print(chest)51 print(table)52 53 # 创建房子54 my_home = House("三室两厅", 130)55 56 my_home.add_item(bed)57 my_home.add_item(chest)58 my_home.add_item(table)59 print(my_home)60 61 # 打印结果62 # [席梦思] 占地 4.0063 # [衣柜] 占地 2.0064 # [餐桌] 占地 1.5065 # 要添加 [席梦思] 占地 4.0066 # 要添加 [衣柜] 占地 2.0067 # 要添加 [餐桌] 占地 1.5068 # 户型: 三室两厅69 # 总面积: 130.00[剩余: 122.50]70 # 家具: ['席梦思', '衣柜', '餐桌']

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/xinmomoyan/p/10347075.html

你可能感兴趣的文章
[汇编语言学习笔记][第四章第一个程序的编写]
查看>>
android 打开各种文件(setDataAndType)转:
查看>>
补交:最最原始的第一次作业(当时没有选上课,所以不知道)
查看>>
Vue实例初始化的选项配置对象详解
查看>>
PLM产品技术的发展趋势 来源:e-works 作者:清软英泰 党伟升 罗先海 耿坤瑛
查看>>
vue part3.3 小案例ajax (axios) 及页面异步显示
查看>>
浅谈MVC3自定义分页
查看>>
.net中ashx文件有什么用?功能有那些,一般用在什么情况下?
查看>>
select、poll、epoll之间的区别总结[整理]【转】
查看>>
CSS基础知识(上)
查看>>
PHP中常见的面试题2(附答案)
查看>>
26.Azure备份服务器(下)
查看>>
mybatis学习
查看>>
LCD的接口类型详解
查看>>
Spring Boot Unregistering JMX-exposed beans on shutdown
查看>>
poi 导入导出的api说明(大全)
查看>>
Mono for Android 优势与劣势
查看>>
将图片转成base64字符串并在JSP页面显示的Java代码
查看>>
js 面试题
查看>>
sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)
查看>>