類的繼承

面向對象編程(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()
相關文章
相關標籤/搜索