Python全棧開發實戰學習15

2021-09-11 18:29:57 字數 2806 閱讀 8304

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

組合是指在乙個類中以另外乙個類的物件作為資料屬性,稱為類的組合

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...