組合的概念:軟體重用的重要方式除了繼承之外還有另外一種方式,即:組合
組合指的是,在乙個類中以另外乙個類的物件作為資料屬性,稱為類的組合
>>> class equip: #**裝備類... def fire(self):
... print('release fire skill')
...>>> class riven: #英雄riven的類,乙個英雄需要有裝備,因而需要組合equip類
... camp='noxus'
... def __init__(self,nickname):
... self.nickname=nickname
... self.equip=equip() #用equip類產生乙個裝備,賦值給例項的equip屬性
...>>> r1=riven('銳雯雯')
>>> r1.equip.fire() #可以使用組合的類產生的物件所持有的方法
release fire skill
組合與繼承都是有效地利用已有類的資源的重要方式。但是二者的概念和使用場景皆不同,
1.繼承的方式
通過繼承建立了派生類與基類之間的關係,它是一種'是'的關係,比如白馬是馬,人是動物。
當類之間有很多相同的功能,提取這些共同的功能做成基類,用繼承比較好,比如
教授是老師
>>> class teacher:... def __init__(self,name,gender):
... self.name=name
... self.gender=gender
... def teach(self):
... print('teaching')
...>>>
>>> class professor(teacher):
... pass
...>>> p1=professor('egon','male')
>>> p1.teach()
teaching
2.組合的方式
用組合的方式建立了類與組合的類之間的關係,它是一種『有』的關係,比如教授有生日,
教授教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):
self.name=name
self.gender=gender
def teach(self):
print('teaching')
class professor(teacher):
def __init__(self,name,gender,birth,course):
teacher.__init__(self,name,gender)
self.birth=birth
self.course=course
p1=professor('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)
當類之間有顯著不同,並且較小的類是較大的類所需要的元件時,用組合比較好。
類與物件之組合
第二大題 基於圓形類實現乙個圓環類,要求接收引數 外圓半徑和內圓半徑 完成方法 計算環形面積和環形周長 公式自己上網查 radius半徑 acreage面積 要求,借助組合,要求組合圓形類的物件完成需求 circular ring圓環 perimeter周長 from math import pi ...
Python與機器學習之Numpy描述性統計
在機器學習應用過程中,遇到複雜的機器學習系統,往往是乙個人或者乙個團隊去研究優化某個部分。而andrew ng不止一次的提到,有些公司花六個月去解決一開始就錯的問題 eg.high variance but try more training examples 最後發現該部分根本不影響整體。from...
python排列組合之itertools模組
幾個有用的python函式 笛卡爾積,排列,組合 9.7.itertools functions creating iterators for efficient looping 1 有序排列permutations a。2 不放回抽球兩次,r引數預設為len abc 3 for i in iter...