Python 知识要点:案例:士兵突击
【封装】
- 封装是面向对象编程的一大特点
- 面向对象编程的第一步,将属性和方法封装到一个抽象的类中
- 外界使用类创建对象,然后让对象调用方法
- 对象方法的细节都被封装在类的内部
一个对象的属性可以是另外一个类创建的对象
【需求】
- 士兵许三多有一把AK47
- 士兵可以开火
- 枪能发射子弹
- 枪装填子弹,增加子弹数量
【开发士兵类】
假设每个新兵都没有枪
定义没有初始值的属性,可以用None:
- None关键字表示什么都没有
- 表示一个空对象,没有方法和属性,是一个特殊的变量
- 可以将None赋值给任何一个变量
【小结】
- 创建一个士兵类,使用到 __init__ 内置方法
- 在定义属性时,如果不知道设置什么初始值,可以设置为None
- 在封装的方法内部,还可以让自己使用其他类创建的对象属性,调用已经封装好的方法
class Gun: def __init__(self, model): # 1.枪的型号 self.model = model # 2.子弹的数量 self.bullet_count = 0 # 装填子弹 def add_bullet(self, count): self.bullet_count += count # 射击 def shoot(self): # 1.判断子弹数量 if self.bullet_count <= 0: print("[%s]没有子弹了[%d]" % (self.model, self.bullet_count)) return # 2.发射子弹, -1 self.bullet_count -= 1 # 3.提示发射信息 print("哒哒哒[%d]" % self.bullet_count) class Soldier: def __init__(self, name): # 1.姓名 self.name = name # 2.枪,新兵没有枪 self.gun = None def fire(self): # 1.判断士兵是否有枪 # if self.gun == None: if self.gun is None: print("尴尬[%s]还没有枪" % self.name) return # 2.高喊口号 print("冲嘎!!") # 3.装填子弹 if self.gun.bullet_count <= 0: self.gun.add_bullet(50) # 4.射击 self.gun.shoot() # 1.创建枪对象 ak = Gun("AK") ak.add_bullet(45) ak.shoot() # 2.创建士兵许三多 xu_san_duo = Soldier("许三多") xu_san_duo.gun = ak while xu_san_duo.gun.bullet_count > 0: xu_san_duo.fire() print("士兵许三多出色完成任务")
从现在开始,种下梦想中的参天大树