繼承外另一種重用方式 組合

2021-09-29 19:01:25 字數 2222 閱讀 8608

軟體重用的重要方式除了繼承之外還有另外一種方式——組合

組合指的是,在乙個類中以另外乙個類的物件(也就是例項)作為資料屬性,稱為類的組合。

也就是說,乙個類的屬性是另乙個類的物件,就是組合。

>>> class equip: #

**裝備類

... def

fire(self):

...

print('

release fire skill')

...

>>> class riven: #

英雄riven的類,乙個英雄需要有裝備,因而需要組合equip類

... camp='

noxus

'...

def__init__

(self,nickname):

... self.nickname=nickname

... self.equip=equip() #

用equip類產生乙個裝備,賦值給例項的equip屬性

...

>>> r1=riven('

銳雯雯'

)>>> r1.equip.fire() #

可以使用組合的類產生的物件所持有的方法

release fire skill

共性

組合和繼承都是有效利用已有類資源的重要方式(**重用)。

差異

繼承:建立派生類和基類間的關係,是一種「是」的關係。

組合:建立類與組合的類之間的關係,是一種「有」的關係。

適用情況

繼承:當類之間有很多相同的功能,提取這些共同的功能做成基類,用繼承比較好  

組合:當類之間有顯著不同,並且較小的類是較大的類所需要的元件時,用組合比較好。

class

people:

def__init__

(self,name,age,***):

self.name=name

self.age=age

self.***=***

class

course:

def__init__

(self,name,period,price):

self.name=name

self.period=period

self.price=price

deftell_info(self):

print('

<%s %s %s>

' %(self.name,self.period,self.price))

class

teacher(people):

def__init__

(self,name,age,***,job_title):

people.

__init__

(self,name,age,***)

self.job_title=job_title

self.course=

self.students=

class

student(people):

def__init__

(self,name,age,***):

people.

__init__

(self,name,age,***)

self.course=

egon=teacher('

egon

',18,'

male

','沙河霸道金牌講師')

s1=student('

牛榴彈',18,'

female')

python=course('

python

','3mons

',3000.0)

linux=course('

python

','3mons

',3000.0)

#為老師egon和學生s1新增課程

#為老師egon新增學生s1#使用

for obj in

egon.course:

obj.tell_info()

繼承的另一種使用方式。。。

1 之前講的有繼承關係的類都是我們新建的,不常用 2 最常用的是直接繼承乙個已經存在的類 當你想要建立乙個新的類時 發現這個類中的一些功能在另外的某個類中存在 我們就沒必要從頭開始重寫這些功能,可以直接繼承已有的類,然後做補充 注 假如我們時需要父類中的初始化屬性,並且還需要新增點屬性,那麼必須覆蓋...

for迴圈的另一種方式

語法 for expr1 expr2 expr3 do done 解釋 expr1 控制變數的初始值 expr2 判定什麼時候退出迴圈 expr3 修正這個變數的值 範例 計算1到100之間的數值的和 這裡面 有倆種方式 最普通的是我們想到的是 1到100之間的數列,另一種是今天的小知識點的運用 這...

另一種尊重

上中學的時候,有一節課印象非常深刻。老師問我們如果無意闖入乙個房間,發現房間裡有一位女士正在洗澡,這時應該怎麼辦?有同學回答就當什麼也沒看見,退出房間。還有同學回答 說聲對不起!女士。然後退出去。老師笑了笑說,還有更好的答案,那就是 對不起,先生!有一對結婚多年的夫妻,有一次出差在外的妻子有一件急事...