第十二天Python之面向对象封装案例

2024-02-21 01:38

本文主要是介绍第十二天Python之面向对象封装案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目标

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

一、封装

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

二、小明爱跑步

需求

  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)

1. 小明爱跑步扩展——小美也爱跑步

需求

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

在这里插入图片描述

提示

  1. 对象的方法内部,是可以 直接访问对象的属性
  2. 同一个类 创建的 多个对象之间属性 互不干扰!
    在这里插入图片描述
    三、摆放家具

需求

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

剩余面积

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

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

答案——家具类

  1. 家具简单
  2. 房子要是用到家具,被使用的类, 通常应该先开发
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. 创建家具
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)

小结

  1. 创建了一个 房子类 ,是用到 __ init __ 和 __ str __ 两个内置方法
  2. 准备了一个 add_item 方法 准备添加家具
  3. 使用 房子类 创建了 一个房子对象

3. 添加家具

需求

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

面向对象封装案例 II

目标

  • 士兵突击案例
  • 身份运算符

封装

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

一个对象的 属性 可以是另外一个类创建的对象

一、士兵突击
需求

  1. 士兵 许三多 有一把 AK47
  2. 士兵 可以 开火
  3. 能够 发射 子弹
  4. 装填 装填子弹 —— 增加子弹数量
    在这里插入图片描述

1. 开发枪类

class Gun:def __init__(self, model):# 1. 枪的型号self.model = model# 2. 子弹的数量self.bulle_count = 0def add_bullet(self,count):self.bulle_count += countdef shoot(self):# 1. 判断子弹数量if self.bulle_count <= 0:print("[%s] 没有子弹了..." % self.model)return# 2. 发射子弹, -1self.bulle_count -= 1# 3. 提示发射信息print("[%s] 突突突...[%d]" % (self.model, self.bulle_count))# 1. 创建枪对象
ak47 = Gun("AK47")ak47.add_bullet(50)
ak47.shoot()

2. 开发士兵类

假设:每一个新兵 都 没有枪

定义没有初始值的属性

在定义属性时,如果 不知道设置什么初始值, 可以设置为 None

  • None 关键字 表示 什么都没有
  • 表示一个 空对象,没有方法和属性,是一个特殊的常量
  • 可以将 None 赋值给任何一个变量

fire 方法需求

  • 1> 判断是否有枪,没有枪没法冲锋
  • 2> 喊一声口号
  • 3> 装填子弹
  • 4> 射击
class Gun:def __init__(self, model):# 1. 枪的型号self.model = model# 2. 子弹的数量self.bulle_count = 0def add_bullet(self,count):self.bulle_count += countdef shoot(self):# 1. 判断子弹数量if self.bulle_count <= 0:print("[%s] 没有子弹了..." % self.model)return# 2. 发射子弹, -1self.bulle_count -= 1# 3. 提示发射信息print("[%s] 突突突...[%d]" % (self.model, self.bulle_count))class Solider:def __init__(self, name):# 1. 姓名self.name = name# 2. 枪 - 新兵没有枪self.gun = Nonedef fire(self):# 1. 判断士兵是否有枪if self.gun == None:print("[%s] 还没有枪" % self.name)return# 2. 高喊口号print("冲啊...[%s]" % self.name)# 3. 让枪装填子弹self.gun.add_bullet(50)# 4. 让枪发射子弹self.gun.shoot()# 1. 创建枪对象
ak47 = Gun("AK47")ak47.add_bullet(50)
ak47.shoot()# 2. 创建许三多
xusanduo = Solider("许三多")xusanduo.gun = ak47
xusanduo.fire()print(xusanduo.gun)

小结

  1. 创建了一个 士兵类 ,使用到 __ init __ 内置方法
  2. 在定义属性时,如果 不知道设置什么初始值,可以设置为 None
  3. 封装的 方法内部,还可以让 自己的 使用其他类创建的对象属性 调用已经 封装好的方法

二、身份运算符

身份运算符用于 比较 两个对象的 内存地址 是否一致 —— 是否是对同一个对象的引用

  • 在 Python 中针对 None 比较时,建议使用 is 判断
运算符描述实例
isis 是判断两个标识符是不是引用同一个对象x is y , 类似 id(x) == id(y)
is notis not 是判断两个标识符是不是引用不同对象x is not y ,类似 id(a)! = id(b)

is 与 == 区别

is 用于判断 两个变量 引用对象是否为同一个
== 用于判断 引用变量的值 是否相等

>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> b is a 
False
>>> b == a
True

这篇关于第十二天Python之面向对象封装案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/730195

相关文章

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

SpringBoot实现动态插拔的AOP的完整案例

《SpringBoot实现动态插拔的AOP的完整案例》在现代软件开发中,面向切面编程(AOP)是一种非常重要的技术,能够有效实现日志记录、安全控制、性能监控等横切关注点的分离,在传统的AOP实现中,切... 目录引言一、AOP 概述1.1 什么是 AOP1.2 AOP 的典型应用场景1.3 为什么需要动态插

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3