Python 知识要点:案例:士兵突击

【封装】

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

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

【需求】

  • 士兵许三多有一把AK47
  • 士兵可以开火
  • 枪能发射子弹
  • 枪装填子弹,增加子弹数量

【开发士兵类】

假设每个新兵都没有枪

定义没有初始值的属性,可以用None:

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

【小结】

  • 创建一个士兵类,使用到 __init__ 内置方法
  • 在定义属性时,如果不知道设置什么初始值,可以设置为None
  • 在封装的方法内部,还可以让自己使用其他类创建的对象属性,调用已经封装好的方法
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]没有子弹了[%d]" % (self.model, self.bullet_count))
            return

        # 2.发射子弹, -1
        self.bullet_count -= 1

        # 3.提示发射信息
        print("哒哒哒[%d]" % self.bullet_count)


class Soldier:
    def __init__(self, name):
        # 1.姓名
        self.name = name

        # 2.枪,新兵没有枪
        self.gun = None

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

        # 2.高喊口号
        print("冲嘎!!")

        # 3.装填子弹
        if self.gun.bullet_count <= 0:
            self.gun.add_bullet(50)

        # 4.射击
        self.gun.shoot()


# 1.创建枪对象
ak = Gun("AK")
ak.add_bullet(45)
ak.shoot()

# 2.创建士兵许三多
xu_san_duo = Soldier("许三多")

xu_san_duo.gun = ak

while xu_san_duo.gun.bullet_count > 0:
    xu_san_duo.fire()

print("士兵许三多出色完成任务")
从现在开始,种下梦想中的参天大树
原文地址:https://www.cnblogs.com/dc2019/p/13183993.html