軟體重用的重要方式除了繼承之外還有另外一種方式,即組合
組合是指在乙個類中以另外乙個類的物件作為資料屬性,稱為類的組合
class
equip
:# **裝備類
deffire
(self)
:print
('release fire skill'
)class
riven
:# 英雄riven的類,乙個英雄需要有裝備,因而需要組合equdeip類
camp =
'noxus'
def__init__
(self,nickname)
: self.nickname = nickname
self.equip = equip(
)# 用equip類產生乙個裝備,賦值給例項的equip屬性
r1 = riven(
'瑞文'
)r1.equip.fire(
)# release fire skill
組合和繼承都有效利用了已有類的資源的重要方式。但是二者的概念和使用場景皆不同。
1.繼承的方式:通過繼承建立了派生類和基類的關係,它是一種「是」的關係,比如白馬是馬,認識動物。當類之間有很多相同的功能,提取這些共同的功能作為基類,用繼承比較好,比如老師是人,學生是人。
2.組合的方式:用組合的方式建立了類與組合的類之間的關係,它是一種「有」的關係,比如教授有生日,教授教python和linux課程,教授有學生s1,s2,s3……
示例:繼承和組合
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(
'卡薩丁',15
,'male'
)python = course(
'python'
,'3mons'
,3000.0
)linux = course(
'linux'
,'3mons'
,3000.0
)#為老師egon和學生s1新增課程
# 為老師egon新增學生s1
# 使用
for obj in egon.course:
obj.tell_info()==
====
====
====
====
====
====
====
結果>
>
總結:當類之間有顯著不同,並且較小的類是較大的類所需要的元件時,用組合比較好
class
teacher
:def
__init__
(self,name,***,age,birthday)
: self.name = name
self.*** = ***
self.age = age
self.birthday = birthday
class
birthday
:def
__init__
(self,year,month,day)
: self.year = year
self.month = month
self.day = day
b = birthday(
2019,3
,2)ess = teacher(
'ess'
,'女',18
,b)print
(ess.name)
# ess
print
(ess.birthday.year)
# 2019
Python全棧開發實戰學習6
把列表 0,1,2,3,4,5,6,7,8,9 中的每個元素加1 a i 1 for i in range 10 print a 結果 1 2,3 4,5 6,7 8,9 10 這樣的寫法就叫做列表生成式 列表是可迭代的,但不是迭代器 l 1 2,3 4,5 6 for i in l 生成了乙個迭代...
Python全棧開發實戰學習7
import module from module import xx from module.xx.xx import xx as rename from module.xx.xx import 編譯原始碼 python setup.py build 安裝原始碼 python setup.py i...
Python全棧開發實戰學習13
class 類名 屬性 方法 pass現實中先有物件後有類 物件1 李坦克 特徵 學校 oldboy 姓名 李坦克 性別 男 年齡 22 技能 吃飯 學習睡覺 物件2 王大陸 特徵 學校 oldboy 姓名 王大陸 性別 男 年齡 21 技能 吃飯 學習睡覺 物件3 牛深度 特徵 學校 oldboy...