# 对象封装:对象的属性可以是另一个类创建的对象 # 案例需求: # 1、士兵许三多有一把AK47 # 2、士兵用枪射击标靶 # 3、枪能装填和发射子弹 class Gun: # 分析: # 枪的属性:1、枪有型号区分;2、枪要有子弹 # 枪的方法:1、能装填子弹;2、能发射子弹 def __init__(self, model): self.model = model self.bullet_count = 0 def add_bullet(self, count): self.bullet_count += count def shoot(self): self.bullet_count -= 1 class Soldier: # 分析: # 士兵属性:士兵有名字;“可能”会有配枪 # 士兵方法:士兵用枪射击标靶 def __init__(self, name): self.name = name self.gun = None # 因为该属性不确定,所以用None def check_gun(self): if self.gun.bullet_count <= 0: print(F"{self.gun.model} 没有子弹,请装填子弹") print("装弹完成") def fire(self, shoot_count): if self.gun is None: print(F"士兵 {self.name} 没有配枪,无法射击!") return else: print(F"士兵 {self.name} 已配备 {self.gun.model}!") self.gun.add_bullet(shoot_count) for i in range(shoot_count): self.gun.shoot() print(F"{self.name} 用 {self.gun.model} 成功射中标靶 子弹剩余:{self.gun.bullet_count}") xusanduo = Soldier("许三多") xusanduo.fire(3) # 士兵 许三多 没有配枪,无法射击! ak47 = Gun("AK47") # 士兵 许三多 已配备 AK47! xusanduo.gun = ak47 xusanduo.fire(3) # 许三多 用 AK47 成功射中标靶,子弹剩余:XXX # 总结:Soldier类的属性self.gun的值为Gun类创建的对象“ak47”