Python學習筆記(15) 繼承 多型

2022-04-18 04:21:06 字數 2227 閱讀 9302

乙個類a擁有乙個類b的屬性和方法,類a稱作子類或派生類,類b稱作父類或基類

示例:

class

animal(object):

def__init__

(self):

self.color ="黑色"

defrun(self):

print("

---跑---")

class

cat(animal):

pass

tom =cat()

print

(tom.color)

tom.run()

執行結果:

黑色---跑---

說明:1、示例中我們稱cat類繼承了animal類,cat類稱為子類或派生類,animal類稱為父類或基類

2、子類在繼承的時候,在定義類時,小括號()中為父類的名字,父類的屬性和方法會繼承給子類

3、示例中animal沒有繼承其他類的時候預設繼承object類,object類是所有類的基類

4、雖然子類cat沒有定義__init__、run方法,但是父類animal有,所以在子類繼承父類的時候__init__、run方法就被繼承了,所以在建立tom物件時,預設執行了那個繼承過來的__init__、run方法,所以執行結果輸出了黑色、---跑---

注意:父類中的私有屬性、私有方法無法被繼承

示例:

class

animal(object):

def__init__

(self):

self.

__color ="黑色"

def__run

(self):

print("

---跑---")

class

cat(animal):

pass

tom =cat()

print

(tom.color)

tom.run()

執行結果:

traceback (most recent call last):

file "f:/untitled/python_jichu/繼承.py", line 9, in

print(tom.color)

attributeerror: 'cat' object has no attribute 'color'

子類擁有多個父類的繼承關係稱作多繼承

示例:

class

a(object):

def__init__

(self):

self.color ="黑色"

defrun(self):

print("

---跑---")

class

b(object):

defjump(self):

print("

---跳---")

class

c(a,b):

pass

c =c()

print

(c.color)

c.run()

c.jump()

執行結果:

黑色---跑---

---跳---

說明:子類在繼承多個父類的時候,在定義類時,小括號()中為父類們的名字,中間用逗號隔開,父類們的屬性和方法會繼承給子類

當多個父類存在同名的方法名稱時,匹配順序為print(c.__mro__)輸出的結果順序

(, , , )

定義功能時不知道這個功能呼叫的是哪乙個方法,**真正執行到呼叫時才根據傳入的資料確定呼叫的是哪個方法

示例:

class

a(object):

defrun(self):

print("

---跑1---")

class

b(object):

defrun(self):

print("

---跑2---")

deftest(temp):

temp.run()

a =a()

b =b()

test(b)

test(a)

執行結果:

---跑2---

---跑1---

說明:定義test函式時並不知道函式需要掉a中的run方法還是b中的run方法,當執行到test()時才根據傳入的物件確定呼叫哪個類中的run方法

Python學習筆記 類的多繼承

類定義 class people 定義類的基本屬性 name age 0 weight 0 定義私有屬性,私有屬性在類外部無法直接進行訪問 def init self,name,age,grade self.name name self.age age self.grade grade defspe...

C 學習筆記 3 4多繼承

多繼承概念 1.乙個類有多個直接基類的繼承關係稱為多繼承 2.多繼承宣告語法 class 派生類名 訪問控制 基類名1,訪問控制 基類名2,訪問控制 基類名n void printb1 private int b1 class base2 void printb2 private int b2 cl...

Python學習筆記(15)

假設要儲存這樣的資料 name agewgt 0dan 123.1 1ann 025.1 2sam 28.3 首先定義乙個人的結構型別 person dtype np.dtype name s10 age int weight float 然後構建乙個3x4的空結構體陣列 people np.emp...