分装:
- 封装是面向对象编程的一大特点
- 面向对象编程的第一步:将属性和方法分装到一个抽象的类中
- 外界使用类创建对象,然后让对象调用方法
- 对象方法的细节都被封装在累的内部
注意:一个对象的属性可以是另外一个类创建的对象
需求:
- 士兵张小嘎 有一把 Ak47
- 士兵 可以 开火
- qiang 能够 发射子弹
- qiang 需要 装填子弹----增加子弹数量
文章图片
二、创建qiang类
根据上面的类图表格来创建qiang类。
model是qiang的型号,bullet_count是子弹的数量,add_bullet(self, count)装填子弹方法,Shoot(self)是发射子弹方法。
代码:
class Gun():def __init__(self, model):# 1. qiang的型号
self.model = model
# 2. 子弹的数量,初始值为0
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. 发射子弹, -1
self.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. 子弹的数量,初始值为0
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. 发射子弹, -1
self.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. 子弹的数量,初始值为0
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. 发射子弹, -1
self.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)
文章图片
执行结果:
【「Python」面向对象封装案例3——士兵突击】
文章图片
以上就是关于面向对象案例士兵突击的分析和代码演练,主要知识点就是一个对象的属性可以是另外一个类创建的对象,以及关键字None的使用。更多Python练习题可以关注Python自学网,不断更新。www.wakey.com.cn/。
推荐阅读
- #|新手入门-个人总结 Django-Vue 项目的创建流程
- 笔记|直接利用pycharm打包python的一些经验总结()
- 大数据|Virtural histology分析
- python|微软的文本转语音服务,已经听不出是机器了
- Data|windows10 pytorch环境搭建
- tensorflow学习|tensorflo之keras高层接口
- Python机器学习基础教程|Python机器学习日记7(朴素贝叶斯分类器(持续更新))
- 数据库|md5解密
- Opencv项目实战|Opencv项目实战(07 人脸识别和考勤系统)