「Python」面向对象封装案例3——士兵突击(需求分析、代码演练)
分装:
- 封装是面向对象编程的一大特点
- 面向对象编程的第一步:将属性和方法分装到一个抽象的类中
- 外界使用类创建对象,然后让对象调用方法
- 对象方法的细节都被封装在累的内部
注意:一个对象的属性可以是另外一个类创建的对象
一、士兵突击案例需求分析
需求:
- 士兵张小嘎 有一把 Ak47
- 士兵 可以 开火
- qiang 能够 发射子弹
- qiang 需要 装填子弹----增加子弹数量
根据需求,划分类,共划分两个类,一个是士兵类,一个是qiang类,由于创建士兵类中用到qiang,所以在创建类的时候先创建qiang类。
Soldier |
name gun |
__init__(self) fire(self) |
Gun |
model bullet_count |
__init__(self, model) add_bullet(self, count) Shoot(self) |
二、创建qiang类
根据上面的类图表格来创建qiang类。
model是qiang的型号,bullet_count是子弹的数量,add_bullet(self, count)装填子弹方法,Shoot(self)是发射子弹方法。
代码:
class Gun():def __init__(self, model):# 1. qiang的型号self.model = model# 2. 子弹的数量,初始值为0self.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# 提示发射信息print("[%s] 突突突。。。[%d]" % (self.model, self.bullet_count))# 1. 创建qiang对象
ak47 = Gun("Ak47")
# 2. 调用方法
ak47.add_bullet(50)
ak47.shoot()
执行结果:
三、创建士兵类
假设:每一个士兵都没有qiang
定义没有初始值的属性:
在定义属性时,如果不知道设置什么初始值,可以设置为None
- None关键字表示 什么都没有
- 表示一个空对象,没有方法和属性,是一个特殊的常量
- 可以将NNone赋值给任何一个变量
fire方法需求:
- 判断是否有qiang,没有枪没办法冲锋
- 喊一声口号
- 装填子弹
- 射击
代码:
class Gun():def __init__(self, model):# 1. qiang的型号self.model = model# 2. 子弹的数量,初始值为0self.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# 提示发射信息print("[%s] 突突突。。。[%d]" % (self.model, self.bullet_count))class Soldier():def __init__(self, name):# 1. 姓名self.name = name# 2. qiang = 新兵没有枪self.gun = None# 1. 创建qiang对象
ak47 = Gun("Ak47")
# 2. 调用方法
ak47.add_bullet(50)
ak47.shoot()# 3. 创建士兵对象-张小嘎
zhang = Soldier("张小嘎")
# 用赋值语句,把ak47交给张小嘎
zhang.gun = ak47print(zhang.gun)
执行结果:
四、完成开火方法
代码:
class Gun():def __init__(self, model):# 1. qiang的型号self.model = model# 2. 子弹的数量,初始值为0self.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# 提示发射信息print("[%s] 突突突。。。[%d]" % (self.model, self.bullet_count))class Soldier():def __init__(self, name):# 1. 姓名self.name = name# 2. qiang = 新兵没有枪self.gun = Nonedef fire(self):# 1. 判断是否有枪if self.gun == None:print("[%s]还没有qiang" % self.name)return# 2. 高喊冲锋口号print("冲啊。。。 [%s]" % self.name)# 3. 装填子弹self.gun.add_bullet(50)# 4. 发射子弹射击self.gun.shoot()# 1. 创建qiang对象
ak47 = Gun("Ak47")
# 2. 调用方法
# ak47.add_bullet(50)
# ak47.shoot()# 3. 创建士兵对象-张小嘎
zhang = Soldier("张小嘎")
# 用赋值语句,把ak47交给张小嘎
zhang.gun = ak47
zhang.fire()
# print(zhang.gun)
执行结果:
以上就是关于面向对象案例士兵突击的分析和代码演练,主要知识点就是一个对象的属性可以是另外一个类创建的对象,以及关键字None的使用。更多Python练习题可以关注Python自学网,不断更新。
面向对象分装案例1——小夏爱跑步:(http://t.csdn.cn/RWvpr)
面向对象封装案例2——士兵突击(http://t.csdn.cn/q5OQh)
「Python」面向对象封装案例3——士兵突击(需求分析、代码演练)相关推荐
- Python之 面向对象封装案例
面向对象封装案例 目标 封装 小明爱跑步 存放家具 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 -- 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象,然后 ...
- 【面向对象学习笔记day05】面向对象封装案例2+士兵突击+开发枪类+开发士兵类+身份运算符+is 与 == 区别
面向对象封装案例 II 文章目录 面向对象封装案例 II 目标 01. 士兵突击 1.1 开发枪类 1.2 开发士兵类 02. 身份运算符 is 与 == 区别: 目标 士兵突击案例 身份运算符 封装 ...
- Python中面向对象封装案例——小明爱跑步、摆放家具
文章目录 面向对象封装案例 目标 1. 封装 2. 小明爱跑步 2.1 小明爱跑步扩展 -- 小美也爱跑步 3. 摆放家具 3.1 创建家具 3.2 创建房间 3.3 添加家具 3.4 小结 面向对象 ...
- Python面向对象封装案例——士兵突击
面向对象封装案例 II 目标 士兵突击案例 身份运算符 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 -- 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象, ...
- python面向对象_05(面向对象封装案例 II)
面向对象封装案例 II 目标 士兵突击案例 身份运算符 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 -- 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象, ...
- 【Python基础】面向对象封装 案例(二)
目录 案例二 1.首先开发 枪类 2.接着开发 士兵类 3.开发 开火类. 案例一在这里: [Python基础]面向对象封装 案例(一) 案例二 仍然是一步一步开发.同时,下面的第3小步是完整代码,亦 ...
- 【Python基础】面向对象封装 案例(一)
目录 面向对象封装案例 1.案例一(简单) 2.案例二(一个类的对象(创建后所自动执行的_ _str_ _()方法) 充当 另一个类de对象所调用的方法中的参数) 1.初步开发 家具类 HouseIt ...
- python-面向对象-05_面向对象封装案例 II
面向对象封装案例 II 目标 士兵突击案例 身份运算符 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 -- 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象, ...
- 21python_面向对象封装案例
面向对象封装案例 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 -- 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对 ...
最新文章
- mysql在线模拟器_力荐一款在线SQL模拟器
- 不看不知道 Vista回收站暗藏的大秘密
- poj 1298 The Hardest Problem Ever
- Java进阶:@FunctionalInterface函数式接口使用说明
- OpenCV形态学变换函数morphologyEx()梯度运算的使用
- hdu 3836 Equivalent Sets
- (计算机组成原理)第五章中央处理器-第五节2:指令流水线影响因素和分类及多发技术
- linux usb书籍,Linux大师(古鲁)话说USB发行版
- SAP License:企业高管眼中的信息化是“万能”的
- TOSCA自动化测试工具安装
- Python+Selenium ----unittest单元测试框架
- sql查询数据库所有表、字、注释
- iOS 开发 多线程详解之线程生命周期控制
- windows10 快速切换网络适配器
- Hyperledger Fabric 管理链码 peer lifecycle chaincode 指令使用
- 【牛奶豆腐汤喝出小蛮腰】
- IDEA更换背景图片
- Qt常用的模板函数说明
- 待办事项 数据库表设计
- 2020年戴森设计大奖国际20强揭晓
热门文章
- 信用卡的使用之二——哪些情况下银行降额
- linux网线插拔后ip地址丢失,网线拔掉检测,嵌入式网线直连开发板断电网线拔掉之后,上电仍能自动设置static静态ip地址...
- 参考文献名称怎么复制_PDF格式的英文文献怎么翻译成中文?教你一招最简单快速的办法...
- [CTF]-HECTF2021部分复现
- iOS 怎么查app的下载量
- 充电器电压和电池电压关系
- 设计和构建区块链社交媒体平台
- python常见ubr前缀的使用与作用
- 在浏览器上打开、预览Excel xlsx表格文件
- java privatekey输出字符串_根据字符串(String)生成公钥(PublicKey)和私钥(PrivateKey)对象...