python面向物件的組合用法
阿新 • • 發佈:2018-11-12
python面向物件的組合用法
程式碼的重複利用除了繼承還有另外的一種方式,就是:組合
組合:在一個類中以另外一個類的對我峽谷作為資料屬性,稱為類的組合
例如:計算圓環的面積:
最開始:我們不使用組合:
from math import pi class circle: def __init__(self, r): self.r = r def circle_area(self): return pi*self.r**2 def circle_permeter(self): return 2*pi*self.r class ring: def __init__(self, out_r, in_r): self.out_r = out_r self.in_r = in_r def ring_area(self): return pi*self.out_r**2 - pi*self.in_r**2 def ring__permeter(self): return pi * self.out_r * 2 - pi * self.in_r * 2 ring1 = ring(5, 3) print(ring1.ring__permeter()) print(ring1.ring_area())
使用組合用法:
from math import pi class circle: def __init__(self, r): self.r = r def circle_area(self): return pi*self.r**2 def circle_permeter(self): return 2*pi*self.r class ring: def __init__(self, out_circle, in_circle): self.out_circle = circle(out_circle) self.in_circle = circle(in_circle) def ring_area(self): return self.out_circle.circle_area() - self.in_circle.circle_area() def ring__permeter(self): return self.out_circle.circle_permeter() - self.in_circle.circle_permeter() ring1 = ring(5, 3) print(ring1.ring__permeter()) print(ring1.ring_area())
組合的兩種方式:
1.在__init__方法裡面組合
class BirthDate: def __init__(self,year,month,day): self.year=year self.month = month self.day = day class Course: def __init__(self,name,price,period): #period為週期 self.name =name self.price = price self.period = period class Teacher: def __init__(self,name,salary,year,month,day,price,period): #那麼這個裡面也要把該有的屬性傳進去 self.birth = BirthDate(year,month,day) #在裡面組合(將BirthDate裡面有的屬性傳入進去) self.course=Course(name,price,period) self.name = name self.salary = salary # 例項化方法一: egg = Teacher('egon',2000,1999,12,2,'6 months','15800') #也要例項化,Teacher類裡面的屬性都得例項化 print(egg.birth.month) #當然老師也有生日,就讓egg.birth.month print(egg.course.period) # 例項化方法二: egg.birth=BirthDate(1996,22,4) print(egg.birth.month) 在__init__裡面組合
2.在外面組合
class BirthDate:
def __init__(self,year,month,day):
self.year=year
self.month = month
self.day = day
class Course:
def __init__(self,name,price,period): #period為週期
self.name =name
self.price = price
self.period = period
class Teacher:
def __init__(self,name,salary,course):
self.name = name
self.salary = salary
self.course = course
#
# #在外面組合。(組合就是一個類的屬性是另一個類的物件)
egg = Teacher('egon',2000,'python')
egg.birth=BirthDate(1996,22,4) #直接給egg一個birth的屬性,
print(egg.birth.year)
egg.course =Course('python','6 months',15800)
print(egg.course.period)
在類外面例項化組合