1.組合的定義
軟體重用的重要方式除了繼承之外還有另外一種方式,即:組合
組合指的是,在乙個類中以另外乙個類的物件作為資料屬性,稱為類的組合。
class
weapon
:def
prick
(self,obj)
:# 這是該裝備的主動技能,扎死對方
obj -=
500# 假設攻擊力是500
print
(obj)
class
person
:# 定義乙個人類
role =
'person'
# 人的角色屬性都是人
def__init__
(self, name)
: self.name = name # 每乙個角色都有自己的暱稱;
self.weapon = weapon(
)# 給角色繫結乙個**;
egg = person(
'egon'
)obj =
1000
egg.weapon.prick(obj)
2.組合的應用例子-圓環計算
圓環是由兩個圓組成的,圓環的面積是外面圓的面積減去內部圓的面積。圓環的周長是內部圓的周長加上外部圓的周長。
這個時候,我們就首先實現乙個圓形類,計算乙個圓的周長和面積。然後在"環形類"中組合圓形的例項作為自己的屬性來用。
'''
'''from math import pi
class
circle
:'''
定義了乙個圓形類;
提供計算面積(area)和周長(perimeter)的方法
'''def__init__
(self,radius)
: self.radius = radius
defarea
(self)
:return pi * self.radius * self.radius
defperimeter
(self)
:return
2* pi *self.radius
circle = circle(10)
#例項化乙個圓
area1 = circle.area(
)#計算圓面積
per1 = circle.perimeter(
)#計算圓周長
print
(area1,per1)
#列印圓面積和周長
class
ring
:'''
定義了乙個圓環類
提供圓環的面積和周長的方法
'''def__init__
(self,radius_outside,radius_inside)
: self.outsid_circle = circle(radius_outside)
self.inside_circle = circle(radius_inside)
defarea
(self)
:return self.outsid_circle.area(
)- self.inside_circle.area(
)def
perimeter
(self)
:return self.outsid_circle.perimeter(
)+ self.inside_circle.perimeter(
)ring = ring(10,
5)#例項化乙個環形
print
(ring.perimeter())
#計算環形的周長
print
(ring.area())
#計算環形的面積
3.組合的應用例子-例項化組合呼叫
用組合的方式建立了類與組合的類之間的關係,它是一種『有』的關係,比如教授有生日,教授教python課程
當類之間有顯著不同,並且較小的類是較大的類所需要的元件時,用組合比較好
class
birthdate
:def
__init__
(self,year,month,day)
: self.year=year
self.month=month
self.day=day
class
couse
:def
__init__
(self,name,price,period)
: self.name=name
self.price=price
self.period=period
class
teacher
:def
__init__
(self,name,gender,birth,course)
: self.name=name
self.gender=gender
self.birth=birth
self.course=course
defteach
(self)
:print
('teaching'
)p1=teacher(
'egon'
,'male'
, birthdate(
'1995'
,'1'
,'27'),
couse(
'python'
,'28000'
,'4 months'))
print
(p1.birth.year,p1.birth.month,p1.birth.day)
print
(p1.course.name,p1.course.price,p1.course.period)
'''
執行結果:
1 27
python 28000 4 months
'''
python3元類 python3元類的呼叫順序
在嘗試理解元類建立類例項的順序時,我感到困惑.根據該圖 source 我鍵入以下 進行驗證.class meta type def call self print meta call super meta,self call def new mcs,name,bases,attrs,kwargs p...
python3使用 python3使用模組
python內建了很多非常有用的模組,只要安裝完畢,這些模組就可以立刻使用。我們以內建的sys模組為例,編寫乙個hello的模組 usr bin env python3 coding utf 8 a test module author michael liao import sys def tes...
python3 類的繼承
基本語法 class derivedclassname baseclassname1 1 需要注意圓括號中父級類的順序,若是父級類中有相同的方法名,而在子類使用時未指定,python從左至右搜尋 即方法在子類中未找到時,從左到右查詢父級類中是否包含方法。示例 class a object pass ...