目标
- 士兵突击案例
- 身份运算符
- 演练重点:
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()


京公网安备 11010502036488号