python之物件導向與建構函式

2021-09-07 07:16:07 字數 1992 閱讀 2973

不同的程式設計正規化本質上代表對各種型別的任務採取的不同的解決問題的思路, 大多數語言只支援一種程式設計正規化,

當然也有些語言可以同時支援多種程式設計正規化。 兩種最重要的程式設計正規化分別是面向過程程式設計和物件導向程式設計。

世界萬物,皆可分類

世界萬物,皆為物件

只要是物件,就肯定屬於某種類

只要是物件,就肯定有屬性

encapsulation封裝

在類中對資料的賦值、內部呼叫對外部使用者是透明的,這使類變成了乙個膠囊或容器,裡面包含著類的資料和方法

inheritance繼承

乙個類可以派生出子類,在這個父類裡定義的屬性、方法自動被子類繼承

多型(之後會舉例子說明)

你的老闆讓所有員工在九點鐘開始工作, 他只要在九點鐘的時候說:「開始工作」即可,而不需要對銷售人員說:「開始銷售工作」,對技術人員說:「開始技術工作」, 因為「員工」是乙個抽象的事物, 只要是員工就可以開始工作,他知道這一點就行了。至於每個員工,當然會各司其職,做各自的工作。

角色的基本屬性設計完了後,我們接下來為每個角色開發以下幾個功能

被打中後就會掉血的功能

開槍功能

換子彈買槍

跑、走、跳、下蹲等動作

保護人質(僅適用於警察)

不能殺同伴

。。。我們可以把每個功能寫成乙個函式,類似如下: 

so far so good, 繼續按照這個思路設計,再完善一下**,遊戲的簡單版就出來了,但是在往下走之前,我們來看看上面的這種**寫法有沒有問題,至少從上面的**設計中,我看到以下幾點缺陷:

1.每個角色定義的屬性名稱是一樣的,但這種命名規則是我們自己約定的,從程式上來講,並沒有進行屬性合法性檢測,也就是說role 1定義的代表**的屬性是weapon, role 2 ,3,4也是一樣的,不過如果我在新增乙個角色時不小心把weapon 寫成了wepon , 這個程式本身是檢測 不到的

2. terrorist 和police這2個角色有些功能是不同的,比如police是不能殺人質的,但是terrorist可能,隨著這個遊戲開發的更複雜,我們會發現這2個角色後續有更多的不同之處, 但現在的這種寫法,我們是沒辦法 把這2個角色適用的功能區分開來的,也就是說,每個角色都可以直接呼叫任意功能,沒有任何限制。

3. 我們在上面定義了got_shot()後要減血,也就是說減血這個動作是應該通過被擊中這個事件來引起的,我們呼叫get_shot(),got_shot()這個函式再呼叫每個角色裡的life_value變數來減血。 但其實我不通過got_shot(),直接呼叫角色roles[role_id][『life_value』] 減血也可以呀,但是如果這樣呼叫的話,那可以就是簡單粗暴啦,因為減血之前其它還應該判斷此角色是否穿了防彈衣等,如果穿了的話,傷害值肯定要減少,got_shot()函式裡就做了這樣的檢測,你這裡直接繞過的話,程式就亂了。 因此這裡應該設計 成除了通過got_shot(),其它的方式是沒有辦法給角色減血的,不過在上面的程式設計裡,是沒有辦法實現的。 

4. 現在需要給所有角色新增乙個可以穿防彈衣的功能,那很顯然你得在每個角色裡放乙個屬性來儲存此角色是否穿 了防彈衣,那就要更改每個角色的**,給新增乙個新屬性,這樣太low了,不符合**可復用的原則

上面這4點問題如果不解決,以後肯定會引出更大的坑,有同學說了,解決也不複雜呀,直接在每個功能呼叫時做一下角色判斷啥就好了,沒錯,你要非得這麼霸王硬上弓的搞也肯定是可以實現的,那你自己就開發相應的**來對上面提到的問題進行處理好啦。 但這些問題其實能過oop就可以很簡單的解決。

參考

例項化:把乙個類變成具體物件的過程,叫例項化

python之物件導向與建構函式

不同的程式設計正規化本質上代表對各種型別的任務採取的不同的解決問題的思路,大多數語言只支援一種程式設計正規化,當然也有些語言可以同時支援多種程式設計正規化。兩種最重要的程式設計正規化分別是面向過程程式設計和物件導向程式設計。世界萬物,皆可分類 世界萬物,皆為物件 只要是物件,就肯定屬於某種類 只要是...

python面試題之物件導向and內建函式

1 物件導向 2 內建函式 hash 3 內建函式 eq 1 定義乙個類,然後類中物件的屬性有 姓名,性別,年齡,部門 2 假設幾年後,內部員工轉崗了,3 到了另乙個崗位後,姓名,性別,年齡新的部門,在另乙個員工表有了新的資料 4 然後我認定,假設員工物件的姓名和性別一致,那麼我就認定這是乙個人 5...

python之物件導向

類 是乙個特殊的物件,class a 定義的類屬於 類物件 類的例項 obj a 屬於 例項物件 例項屬性 init 定義例項屬性 例項方法 self 物件名.方法名 類屬性 針對類物件定義的屬性,訪問類屬性方法 類名.類屬性 物件名.類屬性 類方法 針對類物件定義的方法,內部可直接訪問類屬性和其他...