python通過子類繼承超類來定制子類的行為。
1.1 重寫類方法
(1)如果子類和超類有同名方法,根據搜索樹規則,優先調用子類方法。
(2)子類重寫超類方法:在子類定義和父類已有的同名的方法。
(3)一般是對父類方法的加強,即存在父類方法的處理邏輯。
1.2 父類名.方法名
用法
class SupClass:
def methodA(self):pass
class SubClass(SupClass):
def methodA(self):
SupClass.methodA(self)
pass
描述
在子類,通過“父類名.方法名”調用父類同名方法,達到簡化代碼的效果。
SupClass.methodA(self):
(1)通過“類名.方法名”調用方法時,需要送一個實例給方法。
(2)self為當前調用方法的實例,故需顯式將self送給父類方法。
1.3 多態
python子類如果重寫超類的方法,那么根據搜索樹規則:
超類實例對象,會調用超類的同名方法;
子類實例對象,會調用子類的同名方法;
即,會根據當前調用實例,自動調用對應的方法。
條件:
(1) 繼承:多態發生在子類和超類之間
(2) 重寫:子類重寫父類方法。
1.4 示例
class Tool:
def payraise(self,p,*args):
p.payraise(*args)
class MyPerson:
def __init__(self,name,job = None,pay = 0):
self.name = name
self.job = job
self.pay = pay
def payraise(self,rate):
self.pay = int(self.pay * (1 + rate))
def __str__(self):
return 'MyPerson:name={0.name},job={0.job},pay={0.pay}'.format(self)
class MyManager(MyPerson):# 繼承
# 重寫
def payraise(self,rate,bonus=0.1):
MyPerson.payraise(self,rate+bonus)
if __name__ == '__main__':
mp1 = MyPerson('mp1')
mp2 = MyPerson('mp2','c++開發',20000)
mm1 = MyManager('mm1','開發經理',50000)
print(mp1)
print(mp2)
print(mm1)
mp2.payraise(0.1)
mm1.payraise(0.1)
print(mp2)
print(mm1)
print('#'*10+'多態'+'#'*10)
for p in (mp1,mp2,mm1):
p.payraise(0.1)
print(p)
t = Tool()
print('#'*10+'多態'+'#'*10)
for p in (mp1,mp2,mm1):
t.payraise(p,0.1)
print(p)
# 打開cmd,執行下面示例
E:\\documents\\F盤>python myperson.py
MyPerson:name=mp1,job=None,pay=0
MyPerson:name=mp2,job=c++開發,pay=20000
MyPerson:name=mm1,job=開發經理,pay=50000
MyPerson:name=mp2,job=c++開發,pay=22000
MyPerson:name=mm1,job=開發經理,pay=60000
##########多態##########
MyPerson:name=mp1,job=None,pay=0
MyPerson:name=mp2,job=c++開發,pay=24200
MyPerson:name=mm1,job=開發經理,pay=72000
##########多態##########
MyPerson:name=mp1,job=None,pay=0
MyPerson:name=mp2,job=c++開發,pay=26620
MyPerson:name=mm1,job=開發經理,pay=86400
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
編程語言
+關注
關注
10文章
1942瀏覽量
34711 -
python
+關注
關注
56文章
4793瀏覽量
84634
發布評論請先 登錄
相關推薦
請教:子類數據流使用父類后數據類型就變成父類了而不是子類
本帖最后由 wyq95361977 于 2016-6-29 19:50 編輯
在練習系類時碰到一個問題例子中使用信號燈再使用定時器,類的關系還是不變都是子類但是我在練習時類數據流
發表于 06-29 19:40
建立父類即其子類的同名方法——關于重寫VI的問題
隨著項目的進行,發現類的重要性,最近學習時遇到了一些問題:按照《寶典》的介紹(P353),創建了一個運算類作為父類,又創建了一個加法
發表于 09-23 17:07
3分鐘看懂Python面向對象
的直接感覺是這是一種復用代碼的行為。繼承可以理解為它是以普通的類為基礎建立專門的類對象,子類和它繼承的父類是IS-A的關系。多重繼承:不同于
發表于 06-08 14:20
python類的多態和類的property屬性
python類的多態多態,是指在同一類型下的不同形態。比如下面這段代碼class People: def speak(self):passc
發表于 03-09 16:38
詳解IO設備管理之父類調用子類方法的過程
,對象創建和初始化流程結束。——這個注冊過程映射到面向對象中,是繼承父類方法后子類改寫父類方法的過程。2.2.2 再看對象使用從上往下
發表于 10-09 15:18
python類的多態和類的property屬性
python類的多態 多態,是指在同一類型下的不同形態。 比如下面這段代碼 class People: def speak(self): p
super調用父類的構造方法
我們分析這句話“父類對象的引用”,那說明我們使用的時候只能在子類中使用,既然是對象的引用,那么我們也可以用來調用成員屬性以及成員方法,當然了,這里的 super 關鍵字還能夠
java子類可以繼承父類的什么
Java是一種面向對象的編程語言,它支持繼承的概念。繼承是面向對象編程的三大特性之一,它允許一個類(稱為子類或派生類)繼承另一個類(稱為父
評論