python3 類的組合使用

2021-10-22 06:41:26 字數 3111 閱讀 1752

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