python物件導向 類的繼承

2022-06-12 09:36:09 字數 4679 閱讀 3502

**:

子類:son類

父類:father類

以下案例均表示son類繼承父類的一些屬性和初始化引數構造等。

5個模組:

(1):直接呼叫父類屬性方法;

(2):重寫父類屬性方法;

(3):強制呼叫父類私有屬性方法;

(4):呼叫父類的__init__方法

(5):繼承父類初始化過程中的引數

class

father():

def__init__

(self):

self.a='

aaa'

defaction(self):

print('

呼叫父類的方法')

class

son(father):

pass

son=son() #

子類son 繼承父類father的所有屬性和方法

son.action() #

呼叫父類方法

son.a #

呼叫父類屬性

class

father():

def__init__

(self):

self.a='

aaa'

defaction(self):

print('

呼叫父類的方法')

class

son(father):

def__init__

(self):

self.a='

bbb'

defaction(self):

print('

子類重寫父類的方法')

son=son() #

子類son繼承父類father的所有屬性和方法

son.action() #

子類son呼叫自身的action方法而不是父類的action方法

son.a

這裡,子類son已經重寫了父類father的action的方法,並且子類son也有初始化,因此,子類會呼叫自身的action方法和屬性。總結:如果子類沒有重寫父類的方法,當呼叫該方法的時候,會呼叫父類的方法,當子類重寫了父類的方法,預設是呼叫自身的方法。

另外,如果子類son重寫了父類father的方法,如果想呼叫父類的action方法,可以利用super()

#

如果在重新父類方法後,呼叫父類的方法

class

father():

defaction(self):

print('

呼叫父類的方法')

class

son(father):

defaction(self):

super().action()

son=son()

son.action()

class

father():

def__action(self): #

父類的私有方法

print('

呼叫父類的方法')

class

son(father):

defaction(self):

super()._father__action()

son=son()

son.action()

如果自己也定義了 __init__ 方法,那麼父類的屬性是不能直接呼叫的,比如下面的**就會報錯

class

father():

def__init__

(self):

self.a=a

class

son(father):

def__init__

(self):

pass

son=son()

print(son.a)

修改方法:可以在 子類的 __init__中呼叫一下父類的 __init__ 方法,這樣就可以呼叫了

class

father():

def__init__

(self):

self.a='

aaa'

class

son(father):

def__init__

(self):

super().

__init__

()

#也可以用 father.__init__(self) 這裡面的self一定要加上

son=son()

print(son.a)

class

father():

def__init__

(self):

self.a=1self.b=2

class

son(father):

def__init__

(self):

super().

__init__

()

#也可以用 father.__init__(self) 這裡面的self一定要加上

defadd(self):

return self.a+self.b

son=son()

print(son.add())

上述**中,父類在初始化過程中,直接對a,b分別賦值1,2。子類利用super().__init__()繼承了父類的初始化引數a和b,所以子類呼叫自身的add函式(add函式返回a和b的和)會返回結果值。

再看一下,如果不對父類初始化直接賦值,並且子類在呼叫父類初始化過程中,增加額外自身需要的初始化引數值。

說明:三個引數a,b,c,其中a,b來自父類初始化引數,c表示子類初始化引數,但又分為兩種情況:

1):引數c為初始化預設引數,如下面的5.1**中son(1,2),引數1,2分別表示a,b的值,預設為c=10,即等於:son(1,2,10),表明初始化傳參過程中c可以不寫

2):顯式地將初始化引數c修改為其他值,如下面的5.2**中son(1,2,1),引數值1,2,1分別表示a,b,c的值,即顯式地將c=1傳入

具體**如5.1 , 5.2所示,對比檢視:

#

5.1class

father():

def__init__

(self,a,b):

self.a =a

self.b =b

defdev(self):

return self.a -self.b

#呼叫父類初始化引數a,b並增加額外引數c

class

son(father):

def__init__(self,a,b,c=10): #

固定值: 例如預設c=10,也可以顯示地將c賦值

father.__init__

(self,a,b)

self.c =c

defadd(self):

return self.a+self.b

defcompare(self):

if self.c > (self.a+self.b):

return

true

else

:

return

false

son=son(1,2) #

由於c在初始化過程中預設為10,所以c可以不用顯示表達出來

print(son.dev()) #

呼叫父類dev函式

print(son.add()) #

子類自身add函式

print(son.compare()) #

子類自身compare函式

如果將上述5.1**中,修改c為其他引數值(非預設值),改成顯式地將c值傳入

#5.2

class

father():

def__init__

(self,a,b):

self.a =a

self.b =b

defdev(self):

return self.a -self.b

#呼叫父類初始化引數a,b並增加額外引數c

class

son(father):

def__init__(self,a,b,c=10): #

固定值: 例如預設c=10,也可以顯示地將c賦值

father.__init__

(self,a,b)

self.c =c

defadd(self):

return self.a+self.b

defcompare(self):

if self.c > (self.a+self.b):

return

true

else

:

return

false

son=son(1,2,1) #

顯示地將c=1傳入子類初始化函式

print(son.dev()) #

呼叫父類dev函式

print(son.add()) #

子類自身add函式

print(son.compare()) #

子類自身compare函式

Python物件導向 類的繼承

基本概念 物件導向三要素之一,繼承inheritance 上例可以看出,通過繼承 貓類不同寫 直接繼承了父類的屬性和方法。繼承 定義格式如下 class 子類名 基類1 基類2,語句塊如果類定義時,沒有基類列表,等同於繼承自object。在python3中object類是所有物件的根基類 class...

python學習 物件導向 類 物件 繼承

約定成俗的類的命名方式 1 首字母大寫 2 為了與其他進行區分盡量避免使用 建議採用studenthomework小駝峰的格式 類的常規格式 class student 定義變數 資料成員 student sum 80 類變數 建構函式 def init self,name,age 其中的self....

物件導向 類的繼承

1 派生類物件的構造與析構 建立派生類物件的時候首先呼叫基類的建構函式初始化基類成員,隨後才呼叫派生類建構函式 派生類物件的析構過程首先是呼叫派生類的析構函式,再呼叫基類的析構函式 2 多重繼承 b c都繼承於a,而d繼承於b和c 多重繼承的兩義性 當d的物件呼叫a中的成員時就會產生兩義性 d b ...