封裝編程
1.封裝是面向對象編程的一大特色 2.面向對象編程的第一步 —— 將屬性和方法封裝到一個抽象的類中 3.外界使用類建立對象,而後讓對象調用方法 4.對象方法的細節都被封裝在類的內部 一個對象的屬性能夠是另外一個類建立的對象
需求 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.在封裝的方法內部,還能夠讓本身的使用其餘類建立的對象屬性調用已經封裝好的方法