Python学习第14课 面向对象封装案例II

面向对象封装案例II

目标

● 士兵突击案例
● 身份运算符

封装

1、封装是面向对象编程的一大特点
2、面向对象编程的第一步——将属性和方法封装到类中
3、外界使用类创建对象,然后让对象调用方法
4、对象方法的细节都被封装在类的内部
一个类的属性可以是另一个类创建的对象

01.士兵突击

需求:
1、士兵 许三多有一把AK47
2、士兵可以开火
3、枪能够发射子弹——减少子弹数量
4、枪装填子弹——增加子弹数量

1.1 开发枪类

shoot 方法需求:
● 1)判断子弹数量
● 2)发射子弹,子弹数 -1
● 3)提示发射信息

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】枪中无子弹,需要装填!" % 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 赋值给任何一个变量

class Soldier:

    def __init__(self, name):
        # 1、姓名
        self.name = name
        # 2、枪属性
        self.gun = None


# 1、创建枪对象
ak47 = Gun("AK47")

ak47.add_bullet(50)
ak47.shoot()

# 创建许三多
xusanduo = Soldier("许三多")
xusanduo.gun = ak47
print(xusanduo.gun)

fire方法需求:
● 1)判断是否有枪,没有枪没法冲锋
● 2)喊一声口号
● 3)装填子弹
● 4)射击

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")
# 创建许三多
xusanduo = Soldier("许三多")
xusanduo.gun = ak47
xusanduo.fire()
print(xusanduo.gun)

小结
1、创建了一个士兵类,使用到 __ init __ 内置方法
2、在定义属性时,如果不知道设置什么初始值,可以设置为None
3、在封装方法内部,还可以让自己的使用其他类创建的对象属性 调用封装好的方法

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 用于判断两个变量引用对象是否为同一个人
==用于判断引用对象的值是否相等

猜你喜欢

转载自blog.csdn.net/weixin_42057995/article/details/89359791
今日推荐