軟體重用的重要方式除了繼承之外還有另外一種方式——組合。
組合指的是,在乙個類中以另外乙個類的物件(也就是例項)作為資料屬性,稱為類的組合。
也就是說,乙個類的屬性是另乙個類的物件,就是組合。
>>> 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
共性
組合和繼承都是有效利用已有類資源的重要方式(**重用)。
差異
繼承:建立派生類和基類間的關係,是一種「是」的關係。
組合:建立類與組合的類之間的關係,是一種「有」的關係。
適用情況
繼承:當類之間有很多相同的功能,提取這些共同的功能做成基類,用繼承比較好
組合:當類之間有顯著不同,並且較小的類是較大的類所需要的元件時,用組合比較好。
classpeople:
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之間的數列,另一種是今天的小知識點的運用 這...
另一種尊重
上中學的時候,有一節課印象非常深刻。老師問我們如果無意闖入乙個房間,發現房間裡有一位女士正在洗澡,這時應該怎麼辦?有同學回答就當什麼也沒看見,退出房間。還有同學回答 說聲對不起!女士。然後退出去。老師笑了笑說,還有更好的答案,那就是 對不起,先生!有一對結婚多年的夫妻,有一次出差在外的妻子有一件急事...