面向對象封裝案例 二

封裝編程

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 開發士兵類spa

假設:每個士兵都沒有槍
定義沒有初始值的屬性
在定義屬性時,若是不知道設置什麼初始值,能夠設置爲 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 士兵開火3d

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.身份運算符

相關文章
相關標籤/搜索