面向对象封装案例 二

Posted chx-python

tags:

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

封装

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

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

01.士兵突击

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

技术分享图片

class Gun:
    def __init__(self,modle):

        # 1.枪的型号
        self.model = modle

        # 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 赋值给任何一个变量

fire 方法需求
1.判断是否有枪,没有枪没法冲击
2.喊一声口号
3.装填子弹
4.射击
class Gun:
    def __init__(self,modle):

        # 1.枪的型号
        self.model = modle

        # 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))

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

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

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

ak47.add_bullet(50)
ak47.shoot()

# 2.创建许三多
xusanduo = Soldier("许三多")

xusanduo.gun = ak47

print(xusanduo.gun)

 

1.3 士兵开火

class Gun:
    def __init__(self,modle):

        # 1.枪的型号
        self.model = modle

        # 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))

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")

# 2.创建许三多
xusanduo = Soldier("许三多")

xusanduo.gun = ak47
xusanduo.fire()
print(xusanduo.gun)
小结
1.创建了一个士兵类
2.在定义属性时,如果不知道设置什么初始值,可以设置为 None
3.在封装的方法内部,还可以让自己的使用其他类创建的对象属性调用已经封装好的方法

02.身份运算符

技术分享图片

 

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

Python面向对象封装案例

python面向对象封装案例2

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

面向对象封装案例

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

03-面向对象封装案例