1#author : kelvin2#
date : 2019/1/16 18:5734
class
father:
5 money=100067
def__init__
(self,name):
8print("
父類的init方法...")
9 self.name=name
1011
defteach(self):
12print("
%s 正在教兒子學習...
"%self.name)
1314
class
son(father):
15pass
1617
18 s=son("
kelvin")
19print
(s)20
#>>>: 父類的init方法...21#
>>>: <__main__.son object at 0x0000018b1a1aeeb8>
22s.teach()23#
>>>: kelvin 正在教兒子學習...
可見,即使son類沒有定義init方法,money屬性和teach方法,但是由於son類繼承了father類,所以在例項化son時可以使用父類的屬性值和方法。
使用繼承的最大作用就是定義一種規範。讓繼承者按照規範進行書寫**。
第一種:普通類繼承。缺點:不能限制子類根據父類的規範定義函式。
1#author : kelvin2#
date : 2019/1/16 19:5334
class
basic():56
defeat(self):
7pass89
defdrink(self):
10pass
1112
class
people(basic):
13def
__init__
(self,name):
14 self.name=name
15def
eat(self):
16print("
%s吃飯
"%self.name)
17def
drink(self):
18print("
%s喝水
"%self.name)
1920
class
cat(basic):
21def
__init__
(self,name):
22 self.name=name
23def
eat(self):
24print("
%s吃飯
"%self.name)
2526 c=cat("貓咪"
)27c.eat()
28 c.drink()
很明顯,**可以執行,說明子類即使不按照父類定義的標準執行,也不會報錯。很明顯父類不能起到規定的作用。接下來可以使用這種實現:
1#author : kelvin2#
date : 2019/1/16 19:53
3import
abc4
class basic(metaclass=abc.abcmeta):
5@abc.abstractmethod
6def
eat(self):
7pass
8@abc.abstractmethod
9def
drink(self):
10pass
1112
class
people(basic):
13def
__init__
(self,name):
14 self.name=name
15def
eat(self):
16print("
%s吃飯
"%self.name)
17def
drink(self):
18print("
%s喝水
"%self.name)
1920
class
cat(basic):
21def
__init__
(self,name):
22 self.name=name
23def
eat(self):
24print("
%s吃飯
"%self.name)
2526 c=cat("貓咪"
)27c.eat()
28 c.drink()
此時,由於cat類繼承了basic,但是由於basic類做了限制,繼承basic類必須實現所有basic中的方法,但是cat中只實現了部分方法,因此程式報錯。
如果在子類中定義了和父類同名的屬性和成員方法時,如何才能呼叫父類屬性和方法呢?
1#author : kelvin2#
date : 2019/1/16 20:4534
class
way:
5def
__init__
(self,name,speed):
6 self.name=name
7 self.speed=speed
8def
run(self):
9print("
所有交通工具!")
1011
class
subway(way):
12def
__init__
(self,name,speed,line):13#
way.__init__(self,name,speed)14#
super(subway, self).__init__()
15 super().__init__
(name,speed)
16 self.line=line
17def
run(self):18#
way.run(self)19#
super(subway, self).run()
20super().run()
21print("
地鐵交通工具!")
2223 s=subway("
徐州地鐵
","10km/min
","13號線路")
24 s.run()
注釋的兩種方式可以實現相同效果!
物件導向三大特性之繼承
子類繼承 1 子類和父類如果在同乙個包內,則子類可以繼承父類的除private以外的所有成員變數和方法,並且許可權不變 2 子類和父類如果不在同乙個包內,則子類可以繼承父類的public和protected許可權的成員變數和方法,不能繼承友好型和private 繼承的優點 1.提高 的重用性,子類繼...
物件導向三大特性之繼承(二)
繼承是物件導向最顯著的乙個特性。繼承是從已有的類中派生出新的類,新的類能吸收已有類的資料屬性和行為,並能擴充套件新的能力。編寫乙個father類作為父類 抽象類 1 父類裡必須有乙個abstract修飾符 2 方法上也必須有修飾符 3 抽象方法沒有具體的實現方法體 4 所有的子類必須都要實現抽象方法...
物件導向三大特性之繼承(上)
繼承概念 繼承機制是物件導向設計使 可以復用的最重要的手段,它允許程式設計師在保持原有類特性的基礎上進行擴充套件,增加功能,這樣產生的新類,稱為派生類。include using namespace std 基類 class base void printfbase public int b 派生類...