3.4面向对象封装案例2士兵突击

Posted huohu121

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.4面向对象封装案例2士兵突击相关的知识,希望对你有一定的参考价值。

面向对象封装案例 II

目标

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

封装

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

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

01. 士兵突击

需求

  1. 士兵 许三多 有一把 AK47
  2. 士兵 可以 开火
  3. 能够 发射 子弹
  4. 装填 装填子弹 —— 增加子弹数量

 

1.1 开发枪类

shoot 方法需求

  • 1> 判断是否有子弹,没有子弹无法射击
  • 2> 使用 print 提示射击,并且输出子弹数量

```python class Gun:

def __init__(self, model):

    # 枪的型号
    self.model = model
    # 子弹数量
    self.bullet_count = 0

def add_bullet(self, count):

    self.bullet_count += count

def shoot(self):

    # 判断是否还有子弹
    if self.bullet_count <= 0:
        print("没有子弹了...")

        return

    # 发射一颗子弹
    self.bullet_count -= 1

    print("%s 发射子弹[%d]..." % (self.model, self.bullet_count))

创建枪对象

ak47 = Gun("ak47") ak47.add_bullet(50) ak47.shoot()

```

1.2 开发士兵类

假设:每一个新兵 都 没有枪

定义没有初始值的属性

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

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

fire 方法需求

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

```python class Soldier:

def __init__(self, name):

    # 姓名
    self.name = name
    # 枪,士兵初始没有枪 None 关键字表示什么都没有
    self.gun = None

def fire(self):

    # 1. 判断士兵是否有枪
    if self.gun is None:
        print("[%s] 还没有枪..." % self.name)

        return

    # 2. 高喊口号
    print("冲啊...[%s]" % self.name)

    # 3. 让枪装填子弹
    self.gun.add_bullet(50)

    # 4. 让枪发射子弹
    self.gun.shoot()

```

小结

  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(a) != id(b) |

is 与 == 区别:

is 用于判断 两个变量 引用对象是否为同一个 == 用于判断 引用变量的值 是否相等

```python

a = [1, 2, 3] b = [1, 2, 3] b is a False b == a True ```

以上是关于3.4面向对象封装案例2士兵突击的主要内容,如果未能解决你的问题,请参考以下文章

python面向对象封装案例2

面向对象封装案例

03-面向对象封装案例

3.3面向对象封装案例1摆家具

教学典型案例18.开门小例子理解面向对象

Day499&500.马士兵22春招面试题① -面经