1、面向对象封装案例II——士兵突击

目标

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

封装

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

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

士兵突击

需求

  1. 士兵 许三多 有一把 AK47
  2. 士兵 可以 开火
  3. 能够 发射 子弹
  4. 装填 装填子弹 —— 增加子弹数量


这里有两个类,一个士兵(Soldier),一个枪(Gun);
士兵类中有两个属性:name和gun;一个方法:fire(开火)
枪类中有两个属性:model(枪类)和buttet_count(子弹数);两个方法:add_buttet(装填子弹)和shoot(发射)。
这里的枪类包含在士兵类,所以写代码的时候先写士兵类。

代码演示步骤1:开发枪类

shoot 方法需求

  • 1> 判断是否有子弹,没有子弹无法射击
  • 2> 使用 print 提示射击,并且输出子弹数量
 class Gun:def __init__(self, model):# 1. 枪的型号self.model = model# 2. 子弹的数量self.bullet_count = 0def add_bullet(self, count):    # 用子弹数量这个属性与传递进来的形参做个相加self.bullet_count += countdef shoot(self):# 1. 判断子弹数量if self.bullet_count <= 0:print("[%s] 没有子弹了..." % self.model)return# 2. 发射子弹,-1self.bullet_count -= 1# 3. 提示发射信息print("[%s] 突突突... [%d]" % (self.model, self.bullet_count))# 1. 创建枪对象
ak47 = Gun("AK47")ak47.add_bullet(50)
ak47.shoot()

代码演示步骤2:开发士兵类

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

None的使用!定义没有初始值的属性:

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

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

fire 方法需求

  • 1> 判断是否有枪,没有枪没法冲锋
  • 2> 喊一声口号
  • 3> 装填子弹
  • 4> 射击
注: 在给对象添加属性时,不要再外界添加这个属性,而应该在初始化方法内部,先把属性添加好。如果想要修改这个属性的值,可以再在外部使用赋值语句给这个属性赋值一个新对象就可以。
class Gun:def __init__(self, model):# 1. 枪的型号self.model = model# 2. 子弹的数量self.bullet_count = 0def add_bullet(self, count):self.bullet_count += countdef shoot(self):# 1. 判断子弹数量if self.bullet_count <= 0:print("[%s] 没有子弹了..." % self.model)return# 2. 发射子弹,-1self.bullet_count -= 1# 3. 提示发射信息print("[%s] 突突突... [%d]" % (self.model, self.bullet_count))class Soldier:def __init__(self, name):# 1. 姓名self.name = name# 2. 枪 - 新兵没有枪self.gun = None# 1. 创建枪对象
ak47 = Gun("AK47")ak47.add_bullet(50)
ak47.shoot()# 2. 创建许三多
xusanduo = Soldier("许三多")xusanduo.gun = ak47print(xusanduo.gun)

代码演示步骤3:开发士兵开火

class Gun:def __init__(self, model):# 1. 枪的型号self.model = model# 2. 子弹的数量self.bullet_count = 0def add_bullet(self, count):self.bullet_count += countdef shoot(self):# 1. 判断子弹数量if self.bullet_count <= 0:print("[%s] 没有子弹了..." % self.model)return# 2. 发射子弹,-1self.bullet_count -= 1# 3. 提示发射信息print("[%s] 突突突... [%d]" % (self.model, self.bullet_count))class Soldier:def __init__(self, name):# 1. 姓名self.name = name# 2. 枪 - 新兵没有枪self.gun = Nonedef fire(self):# 1. 判断士兵是否有枪# if self.gun == None:if self.gun is 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")# 2. 创建许三多
xusanduo = Soldier("许三多")xusanduo.gun = ak47
xusanduo.fire()print(xusanduo.gun)

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

小结

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

2、身份运算符:

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

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

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

————————————————————————————————————————————————————————
博客记录日常学习内容~

Python学习:面向对象基础练习——士兵突击(代码演示) 及 身份运算符相关推荐

  1. Python学习入门基础教程(learning Python)--5.6 Python读文件操作高级

    前文5.2节和5.4节分别就Python下读文件操作做了基础性讲述和提升性介绍,但是仍有些问题,比如在5.4节里涉及到一个多次读文件的问题,实际上我们还没有完全阐述完毕,下面这个图片的问题在哪呢? 问 ...

  2. python基础语法及知识总结-Python 学习完基础语法知识后,如何进一步提高?

    ---4.30更新---感谢大家支持,点赞都破两千了.给大家整理出来新的资料,需要的小伙伴来自取: Python练手项目视频如下: Python自学基础知识如下: 以下为原文内容: Python 学习 ...

  3. python学习三-基础语法

    python学习三-基础语法(2019-12-24日晚) 1.源码文件 Python源码文件名通常采用小写的方式,常见的扩展名有: py:基本的源码扩展名. pyw:是另一种源码扩展名,跟py唯一的区 ...

  4. Python学习 - 面向对象之多态

    Python学习 - 语法入门:https://blog.csdn.net/wanzijy/article/details/125287855 Python学习 - 数据类型:https://blog ...

  5. python网页版_经典python学习教程:20行代码打造一个微信群聊助手,解放双手

    今天的Python学习教程教大家如何用20行Python代码实现微信群聊助手,可以用来活跃群气氛,好多群主创建完群后,拉完一群人,之后就一片寂静,有个群聊助手,就可以帮忙活跃群里气氛,通过今天在自己的 ...

  6. Python学习入门7:python学习从基础到高手,再到就业

    其实入门Python并不难,难的是选定自己的学习方向. 简单说下Python可以做什么: 后台开发(Django / Flask / Tornado) 科学计算(Numpy / Scipy / Mat ...

  7. Java学习-面向对象基础

    目录 1.设计对象 2.内存机制 3.面向对象实战:购物车案例 4.构造器.this 4.1构造器 4.2 this 5.封装 6.JavaBean 7.成员变量和局部变量 8.案例 1.设计对象 什 ...

  8. Python学习0——基础知识1

    复习一下:Python基础知识学习 菜鸟教程:Python3 基础语法 | 菜鸟教程 (runoob.com) 一.数据类型 1.Number(数字) (1)数字类型 Python包括4种数字类型:i ...

  9. python学习------面向对象的程序设计

    一 面向对象的程序设计的由来 1940年以前:面向机器最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数 据.简单来说,就是直接编写 0 和 1 的序列来代表程 ...

最新文章

  1. python实现宿舍管理系统_基于PYTHON微信小程序的病历管理系统的设计与实现
  2. 用html5点击消失,input点击后placeholder中的提示消息消失
  3. 【AD】PCB设计知识整理(持续更新)
  4. Linux运行脚手架vue,Linux Nodejs与vue脚手架详解
  5. Node-ES6模块化
  6. select、poll、epoll的区别
  7. android卡机字符串,Android调用replace方法正则表达式卡死
  8. java实现一个电子书下载系统
  9. 南阳理工ACM954--N!
  10. krpano点击场景获取点击位置的场景坐标
  11. Beagleboneblack 中DDS模块驱动源码(AD9833)
  12. CodeSmith链接Oracle、MySQL数据库
  13. APP色彩搭配方案是由主色、辅助色和点缀色构成
  14. matlab 输出两列,Matlab绘制两列正弦波的叠加
  15. 微商城分销系统开发方式需求与价格开发周期评估
  16. css文本行高是哪个属性_CSS样式----CSS属性:字体属性和文本属性(图文详解)...
  17. android 代码浅黄色,Android工程中让人很不爽的“黄色警告”
  18. D语言和Go语言有前途吗?
  19. IDEA——导入jia包错误解决问题
  20. 淘宝高性能可伸缩平台架构简介

热门文章

  1. 微信小程序 - 基本原理
  2. 张氏华孙公 福建省上杭县张氏第一代开基祖宗
  3. 局部加权回归Loess对比MFCC三角滤波(吴恩达机器学习中说,Loess算法用到了aircraft的自动驾驶中)
  4. 企业邮箱管理员在哪里找?域名邮箱如何管理?
  5. 算法系列——寻找峰值 (Find Peak Element)
  6. Oracle全球化 —— 时间类型、时区与时间函数
  7. 一位IT行业高收入者的理财规划方案
  8. 阿里VIP会员看腾讯视频?这不是一个意外的选择
  9. 达梦dm8可视化工具_DM8(达梦8)数据库安装和使用
  10. Java处理敲击键盘事件 Etch-A-Sketch玩具实现 光标画笔画图程序 Java核心技术