美文网首页
「Python」面向对象封装案例3——士兵突击(需求分析、代码演

「Python」面向对象封装案例3——士兵突击(需求分析、代码演

作者: 可可里西 | 来源:发表于2022-09-06 20:35 被阅读0次

    分装:

    1. 封装是面向对象编程的一大特点

    2. 面向对象编程的第一步:将属性和方法分装到一个抽象的类中

    3. 外界使用类创建对象,然后让对象调用方法

    4. 对象方法的细节都被封装在累的内部

    注意:一个对象的属性可以是另外一个类创建的对象

    一、士兵突击案例需求分析

    需求:

    1. 士兵张小嘎 有一把 Ak47

    2. 士兵 可以 开火

    3. qiang 能够 发射子弹

    4. qiang 需要 装填子弹----增加子弹数量

    根据需求,划分类,共划分两个类,一个是士兵类,一个是qiang类,由于创建士兵类中用到qiang,所以在创建类的时候先创建qiang类。

    1662371269134.png

    二、创建qiang类

    根据上面的类图表格来创建qiang类。

    model是qiang的型号,bullet_count是子弹的数量,add_bullet(self, count)装填子弹方法,Shoot(self)是发射子弹方法。

    代码:

    class Gun():
    
        def __init__(self, model):
    
            # 1. qiang的型号
            self.model = model
            # 2. 子弹的数量,初始值为0
            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
    
            # 提示发射信息
            print("[%s] 突突突。。。[%d]" % (self.model, self.bullet_count))
    
    
    # 1. 创建qiang对象
    ak47 = Gun("Ak47")
    # 2. 调用方法
    ak47.add_bullet(50)
    ak47.shoot()
    

    执行结果:

    1.png

    三、创建士兵类

    假设:每一个士兵都没有qiang

    定义没有初始值的属性:

    在定义属性时,如果不知道设置什么初始值,可以设置为None

    1. None关键字表示 什么都没有

    2. 表示一个空对象,没有方法和属性,是一个特殊的常量

    3. 可以将NNone赋值给任何一个变量

    fire方法需求:

    1. 判断是否有qiang,没有枪没办法冲锋

    2. 喊一声口号

    3. 装填子弹

    4. 射击

    代码:

    class Gun():
    
        def __init__(self, model):
    
            # 1. qiang的型号
            self.model = model
            # 2. 子弹的数量,初始值为0
            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
    
            # 提示发射信息
            print("[%s] 突突突。。。[%d]" % (self.model, self.bullet_count))
    
    class Soldier():
    
        def __init__(self, name):
            # 1. 姓名
            self.name = name
    
            # 2. qiang = 新兵没有枪
            self.gun = None
    
    
    # 1. 创建qiang对象
    ak47 = Gun("Ak47")
    # 2. 调用方法
    ak47.add_bullet(50)
    ak47.shoot()
    
    # 3. 创建士兵对象-张小嘎
    zhang = Soldier("张小嘎")
    # 用赋值语句,把ak47交给张小嘎
    zhang.gun = ak47
    
    print(zhang.gun)
    

    执行结果:

    2.png

    四、完成开火方法

    代码:

    class Gun():
    
        def __init__(self, model):
    
            # 1. qiang的型号
            self.model = model
            # 2. 子弹的数量,初始值为0
            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
    
            # 提示发射信息
            print("[%s] 突突突。。。[%d]" % (self.model, self.bullet_count))
    
    class Soldier():
    
        def __init__(self, name):
            # 1. 姓名
            self.name = name
    
            # 2. qiang = 新兵没有枪
            self.gun = None
    
        def fire(self):
    
            # 1. 判断是否有枪
            if self.gun == None:
                print("[%s]还没有qiang" % self.name)
    
                return
            # 2. 高喊冲锋口号
            print("冲啊。。。 [%s]" % self.name)
    
            # 3. 装填子弹
            self.gun.add_bullet(50)
            # 4. 发射子弹射击
            self.gun.shoot()
    
    
    # 1. 创建qiang对象
    ak47 = Gun("Ak47")
    # 2. 调用方法
    # ak47.add_bullet(50)
    # ak47.shoot()
    
    # 3. 创建士兵对象-张小嘎
    zhang = Soldier("张小嘎")
    # 用赋值语句,把ak47交给张小嘎
    zhang.gun = ak47
    zhang.fire()
    # print(zhang.gun)
    
    3.png

    执行结果:

    4.png

    以上就是关于面向对象案例士兵突击的分析和代码演练,主要知识点就是一个对象的属性可以是另外一个类创建的对象,以及关键字None的使用更多Python练习题可以关注Python自学网,不断更新。

    相关文章

      网友评论

          本文标题:「Python」面向对象封装案例3——士兵突击(需求分析、代码演

          本文链接:https://www.haomeiwen.com/subject/ozcwnrtx.html