封装
1.封装是面向对象编程的一大特点
2.面向对象编程的第一步 —— 将属性和方法封装到一个抽象的类中
3.外界使用类创建对象,然后让对象调用方法
4.对象方法的细节都被封装在类的内部
一个对象的属性可以是另一个类创建的对象
01.士兵突击
需求
1.士兵 许三多 有一把AK47
2.士兵可以开火
3.枪能够发射子弹
4.枪装填子弹 —— 增加子弹数量
class Gun:
def __init__(self,modle):
# 1.枪的型号
self.model = modle
# 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] 没有子弹了..." % self.model)
return
# 2.发射子弹,-1
self.bullet_count -= 1
# 3.提示发射信息
print("[%s]突突突...[%d]"% (self.model,self.bullet_count))
# 1.创建枪对象
ak47 = Gun("AK47")
ak47.add_bullet(50)
ak47.shoot()
1.2 开发士兵类
假设:每一个士兵都没有枪
定义没有初始值的属性
在定义属性时,如果不知道设置什么初始值,可以设置为 None
None 关键字表示什么都没有
表示一个空对象,没有办法和属性,是一个特别的常量
可以将 None 赋值给任何一个变量
fire 方法需求
1.判断是否有枪,没有枪没法冲击
2.喊一声口号
3.装填子弹
4.射击
class Gun:
def __init__(self,modle):
# 1.枪的型号
self.model = modle
# 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] 没有子弹了..." % self.model)
return
# 2.发射子弹,-1
self.bullet_count -= 1
# 3.提示发射信息
print("[%s]突突突...[%d]"% (self.model,self.bullet_count))
class Soldier:
def __init__(self,name):
# 1.姓名
self.name = name
# 2.枪 - 新兵没有枪
self.gun = None
# 1.创建枪对象
ak47 = Gun("AK47")
ak47.add_bullet(50)
ak47.shoot()
# 2.创建许三多
xusanduo = Soldier("许三多")
xusanduo.gun = ak47
print(xusanduo.gun)
1.3 士兵开火
class Gun:
def __init__(self,modle):
# 1.枪的型号
self.model = modle
# 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] 没有子弹了..." % self.model)
return
# 2.发射子弹,-1
self.bullet_count -= 1
# 3.提示发射信息
print("[%s]突突突...[%d]"% (self.model,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:
print("[%s]还没有枪..."% self.name)
return
# 2.高喊口号
print("冲啊...[%s]"% self.name)
# 3.让枪填满子弹
self.gun.add_bullet(50)
# 4.让枪发射子弹
self.gun.shoot()
# 1.创建枪对象
ak47 = Gun("AK47")
# 2.创建许三多
xusanduo = Soldier("许三多")
xusanduo.gun = ak47
xusanduo.fire()
print(xusanduo.gun)
小结
1.创建了一个士兵类
2.在定义属性时,如果不知道设置什么初始值,可以设置为 None
3.在封装的方法内部,还可以让自己的使用其他类创建的对象属性调用已经封装好的方法
02.身份运算符