python3 類的組合使用
阿新 • • 發佈:2018-01-21
ins 兩個 months 之間 inside 應用 實例 個人 font
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
def area(self):
return pi * self.radius * self.radius
def perimeter(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)
def area(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
def teach(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 類的組合使用