热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

018面向对象封装案例

目标:封装小明爱跑步存放家具01.封装1.封装是面向对象编程的一大特点2.面向对象编程的第一步–将属性和方法封装到一个抽象的类中3.外界使用类创建对象࿰

目标:
· 封装
· 小明爱跑步
· 存放家具

01.封装

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

02.小明爱跑步

需求:
1.小明体重75.0公斤
2.小明每次跑步会减肥0.5公斤
3.小明每次吃东西体重增加1公斤请添加图片描述
提示:在 对象的方法内部,是可以 直接访问对象的属性的。

class Person:def __init__(self, name, weight):# self.属性 = 形参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.0)xiaoming.run()
xiaoming.eat()print(xiaoming)

请添加图片描述
2.1小明爱跑步扩展–小美也爱跑步

需求:
1.小明和小美都爱跑步
2.小明体重75.0公斤
3.小美体重45.0公斤
4.每次跑步都会减少0.5公斤
5.每次吃东西都会增加1公斤请添加图片描述
提示:同一个类 创建的 多个对象 之间,属性 互不干扰!

03.摆放家具

需求:
1.房子(House)有户型总面积和家具名称列表
· 新房子没有任何的家具
2.家具(Houseltem)有名字和占地面积,其中
· 席梦思(bed)占地4平米
· 衣柜(chest)占地2平米
· 餐桌(table)占地1.5平米
3.将以上三件 家具 添加 到 房子 中
4.打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表
请添加图片描述
剩余面积:
1在创建房子对象时,定义一个剩余面积的属性,初始值和总面积相等
2.当调用 additem方法,向房间添加家具时让 剩余面积 -= 家具面积

思考:应该先开发哪一个类?
答案–家具类
1家具简单
2房子要使用到家具,被使用的类 通常应该先开发

3.2 创建房子类

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

3.3 添加家具

需求:
1.判断 家具的面积 是否 超过剩余面积,如果超过,提示不能添加这件家具
2.将 家具的名称 追加到 家具名称列表 中
3.用 房子的剩余面积 - 家具面积

class HouseItem:def __init__(self, name, area):self.name = nameself.area = areadef __str__(self):return "[%s] 占地 %.2f" % (self.name, self.area)class House:def __init__(self, house_type, 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)# 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("席梦思", 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 1.5)print(bed)
print(chest)
print(table)# 2.创建房子对象
my_home = House("两室一厅", 60)my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)print(my_home)

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


推荐阅读
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
author-avatar
seoer
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有