super是一種子類調用父類的方法,在單繼承時,super獲取的類剛好是父類,但多繼承時,super獲取的是繼承順序中的下一個類。
學習自博客:
https://www.jianshu.com/p/8ddb595628d1
假設多繼承關系如下所示:
Base 父類
A B 子類1
C 子類2
class Base(object):def __init__(self):print('Base')
class A(Base):def __init__(self):print('A')super(A,self).__init__()print('A1')
class B(Base):def __init__(self):print('B')super(B,self).__init__()print('B1')
class C(A,B):def __init__(self):print('C')super(C,self).__init__()print('C1')
C()
輸出:
C
A
B
Base
B1
A1
C1
<__main__.C at 0x7f116638fbe0>
另一個例子:
https://www.jb51.net/article/128571.htm
class A(object):def __init__(self):self.n = 10def minus(self, m): #step4,繼承自身object,n=15self.n -= m #step7,n=8-2=6class B(A):def __init__(self):self.n = 7def minus(self, m): #step2,繼承A,n=15super(B,self).minus(m)self.n -= 2 #step6,n=10-2=8class C(A):def __init__(self):self.n = 12def minus(self, m):super(C,self).minus(m) #step3,繼承A,n=15self.n -= 5 #step5,n=15-5=10class D(B, C):def __init__(self):self.n = 15def minus(self, m):super(D,self).minus(m) #step1,繼承B,但n=15不會變的self.n -= 2 #step8,n=6-2=4
d=D() #實例化D
d.minus(2) #給實例D傳入參數m=2
print(d.n)
輸出:
4
總結:
D-B-C-A-C-B-A-D這是繼承的過程
python 判斷?注意:實例化類后,進行方法引用時,第一步肯定是執行__init__(),但是如果存在繼承,那么父類中的__init__()將不起作用,繼承過程中用的初始化數據屬都是子類的
本人現在的研究方向是:
圖像的語義分割,如果有志同道合的朋友,可以組隊學習
haiyangpengai@gmail.com qq:1355365561
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态