面向對象編程(oop)語言的一個主要功能就是"繼承"。繼承是指這樣一種能力:它可使用如今有類的全部功能,並在無需從新編寫原來的類的狀況下對這些功能進行擴展。
經過繼承建立的新類稱爲"子類"或"派生類"。
被繼承的類成爲"基類"、"父類"或"超類"。
繼承的過程,就是從通常到特殊的過程。
要實現繼承,能夠經過"繼承(Inheritance)和"組合"(Composition)來實現。
在某些OOP語言中,一個子類能夠繼承多個基類。三十通常狀況下,一個子類只能有一個基類,要實現多重繼承,能夠經過多級繼承來實現。
繼承概念的實現方式主要有2類:實現繼承、接口繼承。
©實現繼承是指使用基類的屬性和方法而無需額外編碼的能力;
©接口繼承是指僅使用屬性和方法的名稱、可是子類必須提供實現的能力(子類重構父類方法);
抽象類僅定義將由子類建立的通常屬性和方法。
OO開發範式大體爲:劃分對象-抽象類-將類組織成爲層次化結構(繼承和合成)-用類與實例進行設計和實現幾個階段。
簡單的例子:
1 class dog(object): 2 def __init__(self, name, age, color): 3 self.name = name 4 self.age = age 5 self.color = color 6 7 def normal(self): 8 print("這是一隻%s的狗,今年%s歲了,叫%s" % (self.color, self.age, self.name)) 9 10 11 class bigdog(dog): 12 def __init__(self, name, age, color, big): 13 dog.__init__(self, name, age, color) 14 self.big = big 15 16 def sep(self): 17 print("這個品種的狗狗體型特別大!!!%s" % self.big) 18 19 20 a = dog("豬豬", "2", "白色") 21 b = bigdog("豬豬", "2", "白色", "很是巨大的貴賓犬") 22 a.normal() 23 b.sep()
最典型的例子:編程
1 class F1(object): 2 def __init__(self): 3 print("----") 4 5 def a1(self): 6 print("F1_A1") 7 8 def a2(self): 9 print("F1_A2") 10 11 12 class F2(F1): 13 def __init__(self): 14 print("") 15 16 def a1(self): # 4 F3在父類F2找到a1,開始執行。 17 self.a2() # 5 self這裏變爲F3.a2,運行F3.a2,回到F3子類 18 print("F2_A1") # 7 最後打印 19 20 def a2(self): 21 print("F2_A2") 22 23 24 class F3(F2): 25 def __init__(self): 26 print("") 27 28 def a2(self): # 6 找到F3.a2,而後打印F3_a2,隨後回到父類繼續執行F2.a1 29 print("F3_A2") 30 31 32 obj = F3() # 1 33 obj.a1() # 2 F3 = F3.a1,找不到,因而到父類去找
例子二oop
1 class school(object): 2 """父類的一些基礎屬性""" 3 mement = 0 #統計教室和同窗數量 4 5 def __init__(self, name, age, cla, sex): 6 self.name = name 7 self.age = age 8 self.cla = cla 9 self.sex = sex 10 11 self.pay_fee()#調用後每次運行打印pay_fee類方法展現的內容 12 13 def pay_fee(self): 14 print("開學了%s" % self.name) 15 school.mement += 1 #有一個學生或老師+1 16 17 def __del__(self): 18 school.mement -= 1 19 print("%s退學啦" % (self.name)) 20 21 def tell(self): 22 """各個子類信息內容不一樣,須要變爲字典,而後遍歷字典裏面的內容""" 23 print("\t","----info----%s" % self.name) 24 for k,v in self.__dict__.items(): 25 print("\t",k,v) 26 print("\t","---------------") 27 28 class student(school): 29 """學生""" 30 def __init__(self, name, age, cla, sex, score, fee): 31 school.__init__(self, name, age, cla, sex) 32 self.score = score 33 self.fee = fee 34 35 def clss(self): 36 print("%s同窗今年%s歲,%s,是個%s,入學考試%s分,交了%s元" % (self.name, self.age, self.cla, self.sex, self.score, self.fee)) 37 38 39 class teacher(school): 40 """教師""" 41 def __init__(self, name, age, cla, sex, course, grade): 42 school.__init__(self, name, age, cla, sex) 43 self.course = course 44 self.grade = grade 45 46 def teaching(self): 47 print("%s老師今年%s歲,%s,是個%s,科目%s,等級%s" % (self.name, self.age, self.cla, self.sex, self.course, self.grade)) 48 49 50 t1 = student("李雷", "18", "四年級一班", "男孩", "300", "140000") 51 t2 = teacher("彪狗", "66", "四年級一班", "人妖", "語文", "低水平") 52 53 t1.tell()