python物件導向之類的組合

2022-05-08 11:39:11 字數 3733 閱讀 7702

一、python類的組合:給乙個類的物件封裝乙個屬性,這個屬性是另乙個類的物件

二、組合的意義:讓類的物件與另乙個類的物件產生關係,類與類之間產生關係。

三、例子

模擬英雄聯盟寫乙個遊戲人物的類

要求:(1)建立乙個 game_role的類.

(2)構造方法中給物件封裝 name,ad(攻擊力),hp(血量).三個屬性.

(3)再建立乙個**類weapen,構造方法中給物件封裝 **名、**攻擊力兩個屬性

(4)**類還有乙個攻擊方法用來完成攻擊的功能。

整體實現的是:

例項化乙個物件 蓋倫,ad為69, hp為500

例項化另個乙個物件 亞索 ad為76, hp為400

例項化蓋倫的**: 大寶劍,**攻擊力40

例項化 亞索的**:武士刀,**攻擊力60

蓋倫通過attack方法攻擊劍豪,此方法要完成 '誰用什麼**攻擊了誰,誰掉了多少血, 還剩多少血'的提示功能.

class

game_role:

def__init__

(self,name,ad,hp):

self.name =name

self.ad =ad

self.hp =hp

defuse_weapen(self,w):

self.weapen =w

class

weapen:

def__init__

(self,weapen_name,weapen_ad):

self.weapen_name =weapen_name

self.weapen_ad =weapen_ad

defattack(self,role1,role2):

role2.hp = role2.hp - role1.ad -self.weapen_ad

msg = '

{}用{}攻擊了{},{}掉了{}血,還剩{}血'.\

format(role1.name,self.weapen_name,role2.name,role2.name,(role1.ad +self.weapen_ad),role2.hp)

print

(msg)

#例項化兩個人物物件

p1 = game_role('

蓋倫',69,500)

p2 = game_role('

亞索',76,400)

#例項化兩把**

w1 = weapen('

大寶劍',50)

w2 = weapen('

孤兒劍',60)

#這樣直接呼叫weapen的方法雖然可以實現,但是這樣實現的話,主體誰攻擊誰不能一目了然

w1.attack(p1,p2) #

蓋倫用大寶劍攻擊了亞索,亞索掉了119血,還剩281血

#所以,這時候就需要用到類的組合,在人物物件中設定乙個屬性,把**類的物件傳進去,

#再使用這個屬性呼叫攻擊方法,就可以知道誰發起的攻擊,一目了然

#所以此時要在人物類中設定乙個方法(use_weapen),用於給人物物件設定**的屬性

#這樣就可以一目了然知道誰是攻擊的主體

p1.use_weapen(w1)

#把w1這個物件賦給p1的乙個屬性(weapen) 相當於 p1.weapen = w1

p1.weapen.attack(p1,p2) #

通過p1.weapen呼叫attack方法 相當於 w1.attcak(p1,p2)

#這樣就可以一目了然知道p1是攻擊的主體

一、python類的組合:給乙個類的物件封裝乙個屬性,這個屬性是另乙個類的物件

二、組合的意義:讓類的物件與另乙個類的物件產生關係,類與類之間產生關係。

三、例子

模擬英雄聯盟寫乙個遊戲人物的類

要求:(1)建立乙個 game_role的類.

(2)構造方法中給物件封裝 name,ad(攻擊力),hp(血量).三個屬性.

(3)再建立乙個**類weapen,構造方法中給物件封裝 **名、**攻擊力兩個屬性

(4)**類還有乙個攻擊方法用來完成攻擊的功能。

整體實現的是:

例項化乙個物件 蓋倫,ad為69, hp為500

例項化另個乙個物件 亞索 ad為76, hp為400

例項化蓋倫的**: 大寶劍,**攻擊力40

例項化 亞索的**:武士刀,**攻擊力60

蓋倫通過attack方法攻擊劍豪,此方法要完成 '誰用什麼**攻擊了誰,誰掉了多少血, 還剩多少血'的提示功能.

class

game_role:

def__init__

(self,name,ad,hp):

self.name =name

self.ad =ad

self.hp =hp

defuse_weapen(self,w):

self.weapen =w

class

weapen:

def__init__

(self,weapen_name,weapen_ad):

self.weapen_name =weapen_name

self.weapen_ad =weapen_ad

defattack(self,role1,role2):

role2.hp = role2.hp - role1.ad -self.weapen_ad

msg = '

{}用{}攻擊了{},{}掉了{}血,還剩{}血'.\

format(role1.name,self.weapen_name,role2.name,role2.name,(role1.ad +self.weapen_ad),role2.hp)

print

(msg)

#例項化兩個人物物件

p1 = game_role('

蓋倫',69,500)

p2 = game_role('

亞索',76,400)

#例項化兩把**

w1 = weapen('

大寶劍',50)

w2 = weapen('

孤兒劍',60)

#這樣直接呼叫weapen的方法雖然可以實現,但是這樣實現的話,主體誰攻擊誰不能一目了然

w1.attack(p1,p2) #

蓋倫用大寶劍攻擊了亞索,亞索掉了119血,還剩281血

#所以,這時候就需要用到類的組合,在人物物件中設定乙個屬性,把**類的物件傳進去,

#再使用這個屬性呼叫攻擊方法,就可以知道誰發起的攻擊,一目了然

#所以此時要在人物類中設定乙個方法(use_weapen),用於給人物物件設定**的屬性

#這樣就可以一目了然知道誰是攻擊的主體

p1.use_weapen(w1)

#把w1這個物件賦給p1的乙個屬性(weapen) 相當於 p1.weapen = w1

p1.weapen.attack(p1,p2) #

通過p1.weapen呼叫attack方法 相當於 w1.attcak(p1,p2)

#這樣就可以一目了然知道p1是攻擊的主體

python物件導向之類,物件

類別,乙個是抽象概念 小a的朋友們 是一些列具備相同特徵和相同行為的物件的集合 就是具體操作的某個事物,具備自己的特徵和行 小a的朋友 小明 類包含一系列物件 物件屬於某個類 在現實中先有物件,再有類 在程式中是,先有類,才能有物件 而在程式中是先有類才能物件,我們必須先告訴計篡機這類的物件有什麼特...

Python中物件導向之類

1.建構函式案例 class complex def init self,real,imag 此處要記得寫引數self self.r real self.i imag print 建構函式被呼叫 x complex 3.0,4.5 print x.r,x.i 2.析構函式 案例class compl...

python物件導向之類的繼承

繼承 復用的高階抽象 繼承是物件導向程式設計的精髓之一 實現了以類為單位的高抽象級別 復用 繼承是新定義類能夠幾乎完全使用原有類屬性與方法的過程 基類的屬性基本等同於定義在派生類中 派生類可以直接使用基類的類屬性 例項屬性 派生類可以直接使用基類的各種方法 使用基類的類方法和類屬性時,要用基類的類名...