物件導向三大特性之繼承

2022-04-10 23:25:29 字數 3386 閱讀 1268

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):

[email protected]

6def

eat(self):

7pass

[email protected]

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 派生類...