封装:
1、封装是面向对象编程的一大特点
2、面向对象编程的第一步---将 属性 和 方法 封装到一个抽象的类中
3、外界使用 类 创建对象,然后让对象调用方法
4、对象方法的细节 都被封装在 类 的内部
01士兵突击
需求:
1、士兵 许三多 有一把AK47
2、士兵可以开火
3、枪能够发射子弹
4、枪装填子弹--增加子弹数量
Gun name
bullet
__init__
__str__
shoot
add_bullet
Solider name
gun
__init__
__str__
fire
1.1开发枪类
假设:枪的初始子弹为0
1.2开发士兵类
假设:每一个新兵都没有枪
定义没有初始值的属性:
-可以使用None关键字,表示什么都没有
-表示一个空对象,没有方法和属性,是一个特殊的常量
- 可以将None赋值给任何一个变量
fire方法需求
-判断是否有枪,没有枪无法冲锋
-喊一声口号
-装填子弹
-射击
class Soldier: def __init__(self, name): self.name = name self.gun = None def __str__(self): if self.gun == None: return "士兵%s当前没有枪械,请自行装配武器" % self.name return "%s当前持有%s,有%d发子弹" % (self.name, self.gun, self.gun.bullet) def fire(self): if self.gun == None: print("对不起,你还没有枪") return self.gun.shoot() class Gun: def __init__(self, name): self.name = name self.bullet = 0 def __str__(self): return "%s拥有%d发子弹" % (self.name, self.bullet) def add_bullet(self, num): self.bullet += num def shoot(self): if self.bullet > 0: self.bullet -= 1 print("突突突!还剩%d发子弹" % self.bullet) return print("对不起子弹不足,请补充") gun_1 = Gun("AK47") soldier_1 = Soldier("许三多") print(gun_1) print(soldier_1) soldier_1.fire() soldier_1.gun = gun_1 gun_1.add_bullet(1) soldier_1.gun.shoot() soldier_1.fire()
02身份运算符
身份运算符用于比较两个对象的内存地址是否一致-----是否是对同一对象的引用
在Python中针对None比较时,建议用is判断
运算符 描述 实例 is is是判断两个标识符是不是引用同一个对象 x is y 类似
id(x)== id(y)
is not is not是判断两个标识符是不是引用不同对象 x is not y 类似
id(x)!=id(y)
is与==区别:
-is用于判断两个变量引用的对象是否为同一个
-==用于判断引用变量的值是不是相等