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

Python面向对象封装案例ll

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

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

封装

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

01,士兵突击

需求
1,士兵 许三多 有一把 AK47
2,士兵 可以 开火
3, 能够 发射* 子弹
4,
枪** 装填 装填子弹 -- 增加子弹数量

1306461-20180821172443689-2126057132.png

class Gun:def __init__(self,model):self.model &#61; modeldef add_bullet(self,count):self.bullet_count &#61; countdef shoot(self):# 判读是否还有子弹if self.bullet_count <&#61; 0:print("[%s] 木有子弹啦&#xff0c;剩余 %d" % (self.model, self.bullet_count))return# 发射子弹self.bullet_count -&#61; 1print("%s 发射子弹 [%d]" % (self.model, self.bullet_count))# 创建枪对象ak47 &#61; Gun("AK47")ak47.add_bullet(50)ak47.shoot()# 结果呈现AK47 发射子弹 [49]

1.2 开发士兵类

假设&#xff1a;每一个新兵 都 没有枪

定义没有初始值的属性

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

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

fire 方法需求

  • 1> 判断是否有枪&#xff0c;没有枪不能出征
  • 2> 喊一声口号
  • 3> 装填子弹
  • 4> 射击

class Gun:def __init__(self,model):self.model &#61; modeldef add_bullet(self,count):self.bullet_count &#61; countdef shoot(self):# 判读是否还有子弹if self.bullet_count <&#61; 0:print("[%s] 木有子弹啦&#xff0c;剩余 %d" % (self.model, self.bullet_count))return# 发射子弹self.bullet_count -&#61; 1print("%s 发射子弹 [%d]" % (self.model, self.bullet_count))class Soldier:def __init__(self, name):# 1,姓名self.name &#61; name# 2,枪 - 新兵没有self.gun &#61; Nonedef fire(self):# 1&#xff0c;判读士兵是否有枪if self.gun &#61;&#61; None:print("[%s] 没有枪&#xff0c;不可出征" % self.name)return# 2&#xff0c;高喊口号print("[%s] 端着 【%s】 冲冲冲" % (self.name, self.gun.model))# 3&#xff0c;装子弹self.gun.add_bullet(50)# 4&#xff0c;开枪self.gun.shoot()# 1&#xff0c;创建枪对象ak47 &#61; Gun("AK47")# ak47.add_bullet(50)# ak47.shoot()# 2&#xff0c;创建许三多xusanduo &#61; Soldier("许三多")xusanduo.gun &#61; ak47xusanduo.fire()print(xusanduo.gun)# 结果呈现[许三多] 端着 【AK47】 冲冲冲AK47 发射子弹 [49]<__main__.Gun object at 0x0000001C4C57EC18>

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

02&#xff0c;身份运算符

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

  • python 中针对 None 比较时&#xff0c;建议使用 is 判断
运算符描述实例
isis 是判断两个标识符是不是引用同一个对象x is y &#xff0c;类似 id(x) &#61;&#61; id(y)
is notis not 是判断两个标识符是不是引用不同对象x is not y &#xff0c;类似 id(x) !&#61; id(y)

is 与 &#61;&#61; 区别&#xff1a;

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

In [1]: x &#61; [1, 2, 3]In [2]: y &#61; [1, 2]In [3]: id(x)Out[3]: 140113651590920In [4]: id(y)Out[4]: 140113663786184In [5]: y.append(3)In [6]: yOut[6]: [1, 2, 3]In [7]: id(y)Out[7]: 140113663786184In [8]: x &#61;&#61; yOut[8]: TrueIn [9]: x is yOut[9]: False

1306461-20180822115603899-500992938.png

class Gun:def __init__(self,model):self.model &#61; modeldef add_bullet(self,count):self.bullet_count &#61; countdef shoot(self):# 判读是否还有子弹if self.bullet_count <&#61; 0:print("[%s] 木有子弹啦&#xff0c;剩余 %d" % (self.model, self.bullet_count))return# 发射子弹self.bullet_count -&#61; 1print("%s 发射子弹 [%d]" % (self.model, self.bullet_count))class Soldier:def __init__(self, name):# 1,姓名self.name &#61; name# 2,枪 - 新兵没有self.gun &#61; Nonedef fire(self):# 1&#xff0c;判读士兵是否有枪# if self.gun &#61;&#61; None:if self.gun is None:print("[%s] 没有枪&#xff0c;不可出征" % self.name)return# 2&#xff0c;高喊口号print("[%s] 端着 【%s】 冲冲冲" % (self.name, self.gun.model))# 3&#xff0c;装子弹self.gun.add_bullet(50)# 4&#xff0c;开枪self.gun.shoot()# 1&#xff0c;创建枪对象ak47 &#61; Gun("AK47")# ak47.add_bullet(50)# ak47.shoot()# 2&#xff0c;创建许三多xusanduo &#61; Soldier("许三多")xusanduo.gun &#61; ak47xusanduo.fire()print(xusanduo.gun)# 结果呈现[许三多] 端着 【AK47】 冲冲冲AK47 发射子弹 [49]<__main__.Gun object at 0x000000711CE8EBE0>

转:https://www.cnblogs.com/xiaoqshuo/p/9512683.html



推荐阅读
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 本文介绍如何使用 Python 将一个字符串按照指定的行和元素分隔符进行两次拆分,最终将字符串转换为矩阵形式。通过两种不同的方法实现这一功能:一种是使用循环与 split() 方法,另一种是利用列表推导式。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
author-avatar
wzcheng1984
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有