python物件導向封裝 士兵突擊

2021-10-10 19:05:44 字數 2422 閱讀 2917

重點理解:乙個物件的屬性,可以是另乙個類建立的物件。

專案需求:

1、士兵許三多有一把ak47

2、士兵可以**

3、槍能夠發射子彈

4、槍能夠裝填子彈

專案分析:

根據專案需求,可以提煉出兩個類,

槍類的屬性有:名字、子彈數量

槍類的方法有:裝填子彈、射出子彈

人類的屬性有:名字、槍

人類的方法有:**

因為許三多需要使用ak47,所以我們應該首先開發槍類。

專案開發:

開發槍類:

在開發槍物件的shoot方法時,要先判斷槍是否還有子彈,如果沒有,需要直接使用return關鍵字停止執行下面的**。

class

gun:

def__init__

(self, name)

: self.name = name

self.bullets =

0def

add_bullet

(self, count)

: self.bullets += count

defshoot

(self)

:if self.bullets <=0:

print

("%s沒有子彈了"

% self.name)

return

self.bullets -=

1print

("突突突,%s還有%d發子彈"

%(self.name, self.bullets)

)ak47 = gun(

"ak47"

)ak47.add_bullet(5)

ak47.shoot(

)

開發士兵類:

假設每個新兵都沒有槍。因為新兵沒有槍,所以需要通過形參傳遞的屬性只有name乙個。在使用士兵類建立好許三多物件之後,可以使用賦值語句將ak47賦值給許三多的槍屬性。

在定義屬性的時候,如果不知道設定什麼初始值,可以設定為none,這樣就避免了在外部給物件設定屬性。

none關鍵字表示什麼都沒有,表示乙個空物件,沒有方法和屬性,是乙個特殊的常量,可以將none賦值給任何乙個變數。

在開發士兵類的fire方法的時候:

1、判斷是否有槍

2、喊一聲口號

3、裝填子彈

4、射擊

class

solider

:def

__init__

(self, name)

: self.name = name

self.gun =

none

deffire

(self)

:# 判斷士兵是否有槍

if self.gun is

none

:print

("%s還沒有槍"

% self.name)

return

# 喊一聲口號

print

("衝啊。。。。"

)# 裝填子彈

self.gun.add_bullet(5)

# **

self.gun.shoot(

)xusanduo = solider(

"許三多"

)xusanduo.gun = ak47

xusanduo.fire(

)

這節課的重點是,乙個物件的屬性,可以是另外乙個類建立的物件,所以在士兵開槍的時候,就可以呼叫封裝在槍類裡面的裝填子彈和發射子彈的方法。

在判斷士兵有沒有槍的時候,用了身份運算子is

運算子例項is

類似id(x) =id(y)

is not

類似id(a) != id(b)

is用於判斷兩個變數引用物件是否為同乙個

==用於判斷引用變數的值是否相等

>>

> a =[1

,2,3

]>>

> b =[1

,2,3

]>>

> b is a

false

>>

> b == a

true

物件導向封裝案例 士兵突擊

乙個物件的屬性可以是另外乙個類建立的物件 需求 士兵許三多有一把ak47士兵可以 槍能夠發射子彈 槍裝填裝填子彈 增加子彈數量 開發士兵類假設每乙個新兵都沒有槍 定義沒有初始值的屬性 在定義屬性時,如果不知道設定什麼初始值,可以設定為 none fire 方法需求 實現class gun 槍類 de...

Python 物件導向,封裝

封裝來了 封裝是啥?封裝就好像把你需要的東西裝到盒子裡然後用封口膠把空封起來。照這種邏輯看,封裝 隱藏 哪在python中怎麼看出來隱藏呢?在python中用雙下劃線開頭的方式將屬性隱藏起來 設定成私有的 類中所有雙下劃線開頭的都會自動變形成 類名 x的形式 就是把函式跟方法給封裝起來 定義裡兩個類...

python 物件導向 封裝

1.私有屬性 class person object def init self,name,age self.name name self.age age 例項屬性 self.attack val 30self.life val 100 前面加兩個下劃線就是私有變數,私有屬性 a person wd...