目标
- 士兵突击案例
- 身份运算符
- 演练重点:
1、一个对象的属性可以是另一个类创建的对象
2、定义没有初始值的属性
在定义属性时,如果不知道设置什么初始值,就可以设置为None
None关键字表示什么都没有,表示一个空对象,没有方法和属性,是一个特殊常量
可以将None赋值给任何一个变量
01 士兵突击
需求:
- 士兵 许三多 有一把AK47
- 士兵可以开火
- 枪能够发射子弹
- 枪装填子弹——增加子弹数量
02 身份运算符
身份运算符用于 比较 两个对象的内存地址 是否一致——是否是对同一个对象的引用
- 在python中 针对None 比较时,建议使用 is 判断
- is 是判断两个标识符是不是引用同一个对象 x is y 类似于 id(x) ==id(y)
- is not 判断两个标识符是不是引用不同对象 x is not y类似于id(x) != id(y)
is 与 == 的区别:
- is 用于判断两个变量引用对象是否为同一个
- == 用于判断 引用变量的值 是否相等
class Gun: def __init__(self,model): self.model = model self.bullet_count = 0 def add_bullet(self,count): self.bullet_count += count print("添加子弹完成") def shoot(self): # 1.判断子弹数量 if self.bullet_count > 0: # 2.发射子弹 self.bullet_count -= 1 print("[%s] 突突突...[%d]" % (self.model,self.bullet_count)) return # 3.提示发射信息 print("[%s] 没有子弹了..." % self.model) class Soldier: def __init__(self,name): self.name = name # 枪——新兵没有枪 self.gun = None def fire(self): # 判断士兵是否有枪 # if self.gun == None: if self.gun is None: print("[%s]还没有枪" % self.name) return # 让枪装填子弹 self.gun.add_bullet(10) # 让枪发射子弹 self.gun.shoot() # 创建枪对象 ak47 = Gun("ak47") # 创建许三多 xusanduo = Soldier("许三多") xusanduo.gun = ak47 xusanduo.fire()