

本次实战采用封装思想,将所有属性私有化,并且每个属性都有 setter、getter 方法
枪类,因为士兵类依赖枪类,被依赖的类应该优先开发
假设每把枪一开始都没子弹,需要先手动装弹
class Gun:
# 构造方法
def __init__(self, name):
# 封装 - 将实例属性私有化
self.__name = name
self.__bullet_count = 0
# 自定义打印对象方法
def __str__(self):
return f"枪名:{self.__name} 子弹数:{self.__bullet_count}"
# name - getter
@property
def name(self):
return self.__name
# name - setter
@name.setter
def name(self, name):
self.__name = name
# count - getter
@property
def bulletCount(self):
return self.__bullet_count
# count - setter 相当于装子弹
@bulletCount.setter
def bulletCount(self, count):
self.__bullet_count += count
# shot 发射
def shoot(self):
# 1、判断是否能发射
if self.__bullet_count <= 0:
print(f"{self.__name} 没有子弹了,请先装弹")
return
# 2、发射
print(f"枪名:{self.__name} 发射")
# 3、减少子弹
self.__bullet_count -= 1假设每一个新兵一开始都没有枪
class Solider:
# 构造方法
def __init__(self, name):
self.__name = name
# 默认没有枪
self.__gun = None
# 自定义打印对象方法
def __str__(self):
return f"士兵名字:{self.__name} 拿着一把:{self.__gun.name}"
# name - getter
@property
def name(self):
return self.__name
# name - setter
@name.setter
def name(self, name):
self.__name = name
# gun - getter
@property
def gun(self):
return self.__gun
@gun.setter
def gun(self, gun):
self.__gun = gun
def fire(self):
# 1、先判断是有枪
if self.__gun is None:
print(f"{self.__name} 士兵没有枪,不能发射!!请先装备枪!!")
return
# 2、有枪也要有子弹呀!上膛!
self.__gun.bulletCount += 10
# 3、拿枪射击!
self.__gun.shoot()拿枪射击,其实是
# 声明一个枪
ak47 = Gun("ak47")
print(ak47)
# 声明一个士兵
xusanduo = Solider("许三多")
# 给士兵带上 AK47!
xusanduo.gun = ak47
# 开火!
xusanduo.fire()
print(xusanduo)
# 输出结果
枪名:ak47 子弹数:0
枪名:ak47 发射
士兵名字:许三多 拿着一把:ak47