**:
子類:son類
父類:father類
以下案例均表示son類繼承父類的一些屬性和初始化引數構造等。
5個模組:
(1):直接呼叫父類屬性方法;
(2):重寫父類屬性方法;
(3):強制呼叫父類私有屬性方法;
(4):呼叫父類的__init__方法
(5):繼承父類初始化過程中的引數
classfather():
def__init__
(self):
self.a='
aaa'
defaction(self):
print('
呼叫父類的方法')
class
son(father):
pass
son=son() #
子類son 繼承父類father的所有屬性和方法
son.action() #
呼叫父類方法
son.a #
呼叫父類屬性
classfather():
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()
classfather():
def__action(self): #
父類的私有方法
print('
呼叫父類的方法')
class
son(father):
defaction(self):
super()._father__action()
son=son()
son.action()
如果自己也定義了 __init__ 方法,那麼父類的屬性是不能直接呼叫的,比如下面的**就會報錯
classfather():
def__init__
(self):
self.a=a
class
son(father):
def__init__
(self):
pass
son=son()
print(son.a)
修改方法:可以在 子類的 __init__中呼叫一下父類的 __init__ 方法,這樣就可以呼叫了
classfather():
def__init__
(self):
self.a='
aaa'
class
son(father):
def__init__
(self):
super().
__init__
()
#也可以用 father.__init__(self) 這裡面的self一定要加上
son=son()
print(son.a)
classfather():
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.2class
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 ...