分装:
注意:一个对象的属性可以是另外一个类创建的对象
需求:
根据需求,划分类,共划分两个类,一个是士兵类,一个是qiang类,由于创建士兵类中用到qiang,所以在创建类的时候先创建qiang类。
| Soldier |
| name gun |
| __init__(self) fire(self) |
| Gun |
| model bullet_count |
| __init__(self, model) add_bullet(self, count) Shoot(self) |
根据上面的类图表格来创建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 = 0
-
-
- def add_bullet(self, count):
-
- self.bullet_count += count
-
-
- def 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
fire方法需求:
代码:
- class Gun():
-
- def __init__(self, model):
-
- # 1. qiang的型号
- self.model = model
- # 2. 子弹的数量,初始值为0
- self.bullet_count = 0
-
-
- def add_bullet(self, count):
-
- self.bullet_count += count
-
-
- def 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 = ak47
-
- print(zhang.gun)
执行结果:

代码:
- class Gun():
-
- def __init__(self, model):
-
- # 1. qiang的型号
- self.model = model
- # 2. 子弹的数量,初始值为0
- self.bullet_count = 0
-
-
- def add_bullet(self, count):
-
- self.bullet_count += count
-
-
- def 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
-
- def 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)