組合python
1.什麼是組合linux
組合就是一個類的對象具有一個指向另一個類的對象的屬性app
2.爲什麼用組合spa
組合能夠減小代碼冗餘code
3.如何使用對象
class People: def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex class Course: def __init__(self,name,period,price): self.name=name self.period=period self.price=price def tell_info(self): print('<%s %s %s>' %(self.name,self.period,self.price)) class Teacher(People): def __init__(self,name,age,sex,job_title): People.__init__(self,name,age,sex) self.job_title=job_title self.course=[] self.students=[] class Student(People): def __init__(self,name,age,sex): People.__init__(self,name,age,sex) self.course=[] egon=Teacher('egon',18,'male','沙河霸道金牌講師') s1=Student('牛榴彈',18,'female') python=Course('python','3mons',3000.0) linux=Course('python','3mons',3000.0) #爲老師egon和學生s1添加課程 egon.course.append(python) egon.course.append(linux) s1.course.append(python) #爲老師egon添加學生s1 egon.students.append(s1) #使用 for obj in egon.course: obj.tell_info()
菱形繼承問題 非菱形繼承都是深度優先blog
1.什麼是菱形繼承問題?繼承
一個子類繼承多個父類,最終繼承同一個類it
2.python2中分經典類和新式類io
經典類按深度優先查找屬性
新式類按廣度優先查找屬性
注意:按照發起查找的類爲準,父類中既有新式類,又有經典類與查找的方式無關
在子類派生出的新功能中,重用父類功能的方式有兩種
1.指名道姓地訪問(與繼承無關)
2.嚴格依賴繼承屬性的查找關係
super()會獲得一個特殊的對象,該對象就是專門用來訪問父類中的屬性的(按照繼承關係)
super()__init__(name,age,) 不須要傳self,已經自動傳入
注意:在python2中須要寫完整super(本身的類名,self)__init__(name,age,)
super()誰查找就會以誰的mro()爲準,碰到super()會按當前的位置繼續日後找
多態與多態性
1.什麼是多態與多態性?
多態指的是同一種事物的各類形態
如水能夠有固態,液態,氣態
多態性:繼承同一個類的多個子類中有相同的方法名,那麼子類產生的對象都能不考慮具體的類型而直接調用父類的功能
抽象類
import abc #利用abc模塊實現抽象類
class All_file(metaclass=abc.ABCMeta): # 用於限制子類的定義
all_type='file'
@abc.abstractmethod #定義抽象方法,無需實現功能
def read(self):
'子類必須定義讀功能'
Pass
python中不推薦使用抽象類,python推薦使用鴨子類型。