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


    分装:

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

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

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

    需求:

    1. 士兵张小嘎 有一把 Ak47
    2. 士兵 可以 开火
    3. qiang 能够 发射子弹
    4. qiang 需要 装填子弹----增加子弹数量

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

    Soldier

    name

    gun

    __init__(self)

    fire(self)

    Gun

    model

    bullet_count

    __init__(self, model)

    add_bullet(self, count)

    Shoot(self)

    二、创建qiang类

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

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

    代码:

    1. class Gun():
    2. def __init__(self, model):
    3. # 1. qiang的型号
    4. self.model = model
    5. # 2. 子弹的数量,初始值为0
    6. self.bullet_count = 0
    7. def add_bullet(self, count):
    8. self.bullet_count += count
    9. def shoot(self):
    10. # 1. 判断子弹数量
    11. if self.bullet_count <= 0:
    12. print("[%s] 没有子弹了" % self.model)
    13. return
    14. # 2. 发射子弹, -1
    15. self.bullet_count -= 1
    16. # 提示发射信息
    17. print("[%s] 突突突。。。[%d]" % (self.model, self.bullet_count))
    18. # 1. 创建qiang对象
    19. ak47 = Gun("Ak47")
    20. # 2. 调用方法
    21. ak47.add_bullet(50)
    22. ak47.shoot()

    执行结果:

    三、创建士兵类

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

    定义没有初始值的属性:

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

    1. None关键字表示 什么都没有
    2. 表示一个空对象,没有方法和属性,是一个特殊的常量
    3. 可以将NNone赋值给任何一个变量

    fire方法需求:

    1. 判断是否有qiang,没有枪没办法冲锋
    2. 喊一声口号
    3. 装填子弹
    4. 射击

    代码:

    1. class Gun():
    2. def __init__(self, model):
    3. # 1. qiang的型号
    4. self.model = model
    5. # 2. 子弹的数量,初始值为0
    6. self.bullet_count = 0
    7. def add_bullet(self, count):
    8. self.bullet_count += count
    9. def shoot(self):
    10. # 1. 判断子弹数量
    11. if self.bullet_count <= 0:
    12. print("[%s] 没有子弹了" % self.model)
    13. return
    14. # 2. 发射子弹, -1
    15. self.bullet_count -= 1
    16. # 提示发射信息
    17. print("[%s] 突突突。。。[%d]" % (self.model, self.bullet_count))
    18. class Soldier():
    19. def __init__(self, name):
    20. # 1. 姓名
    21. self.name = name
    22. # 2. qiang = 新兵没有枪
    23. self.gun = None
    24. # 1. 创建qiang对象
    25. ak47 = Gun("Ak47")
    26. # 2. 调用方法
    27. ak47.add_bullet(50)
    28. ak47.shoot()
    29. # 3. 创建士兵对象-张小嘎
    30. zhang = Soldier("张小嘎")
    31. # 用赋值语句,把ak47交给张小嘎
    32. zhang.gun = ak47
    33. print(zhang.gun)

    执行结果:

    四、完成开火方法

    代码:

    1. class Gun():
    2. def __init__(self, model):
    3. # 1. qiang的型号
    4. self.model = model
    5. # 2. 子弹的数量,初始值为0
    6. self.bullet_count = 0
    7. def add_bullet(self, count):
    8. self.bullet_count += count
    9. def shoot(self):
    10. # 1. 判断子弹数量
    11. if self.bullet_count <= 0:
    12. print("[%s] 没有子弹了" % self.model)
    13. return
    14. # 2. 发射子弹, -1
    15. self.bullet_count -= 1
    16. # 提示发射信息
    17. print("[%s] 突突突。。。[%d]" % (self.model, self.bullet_count))
    18. class Soldier():
    19. def __init__(self, name):
    20. # 1. 姓名
    21. self.name = name
    22. # 2. qiang = 新兵没有枪
    23. self.gun = None
    24. def fire(self):
    25. # 1. 判断是否有枪
    26. if self.gun == None:
    27. print("[%s]还没有qiang" % self.name)
    28. return
    29. # 2. 高喊冲锋口号
    30. print("冲啊。。。 [%s]" % self.name)
    31. # 3. 装填子弹
    32. self.gun.add_bullet(50)
    33. # 4. 发射子弹射击
    34. self.gun.shoot()
    35. # 1. 创建qiang对象
    36. ak47 = Gun("Ak47")
    37. # 2. 调用方法
    38. # ak47.add_bullet(50)
    39. # ak47.shoot()
    40. # 3. 创建士兵对象-张小嘎
    41. zhang = Soldier("张小嘎")
    42. # 用赋值语句,把ak47交给张小嘎
    43. zhang.gun = ak47
    44. zhang.fire()
    45. # print(zhang.gun)

    执行结果:

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

    面向对象分装案例1——小夏爱跑步:(http://t.csdn.cn/RWvpr

    面向对象封装案例2——士兵突击(http://t.csdn.cn/q5OQh

  • 相关阅读:
    数聚生态,智驭全界!看天翼云如何为智慧园区注入新动能!
    MySQL中都有哪些锁?
    SpringBoot整合微信扫码登录
    文心一言 VS 讯飞星火 VS chatgpt (271)-- 算法导论20.2 6题
    Docker基础用法
    【DevOps基础篇之k8s】如何应用Kubernetes中的Role Based Access Control(RBAC)
    PyTorch实战:常用卷积神经网络搭建结构速览
    SSM+微信小程序网易云音乐设计与实现 毕业设计-附源码261620
    【机器学习】VAE变分自编码器学习笔记
    Spring Cloud Alibaba-OpenFign实现服务调用
  • 原文地址:https://blog.csdn.net/weixin_48728769/article/details/126727793