python中的super使用方法[探索4]

super

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 = 10

 def minus(self, m): #step4,继承自身object,n=15
  self.n -= m #step7,n=8-2=6

class B(A):
 def __init__(self):
  self.n = 7

 def minus(self, m): #step2,继承A,n=15
  super(B,self).minus(m)
  self.n -= 2 #step6,n=10-2=8

class C(A):
 def __init__(self):
  self.n = 12
 def minus(self, m):
  super(C,self).minus(m) #step3,继承A,n=15
  self.n -= 5 #step5,n=15-5=10

class D(B, C):
 def __init__(self):
  self.n = 15

 def 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这是继承的过程

注意:实例化类后,进行方法引用时,第一步肯定是执行__init__(),但是如果存在继承,那么父类中的__init__()将不起作用,继承过程中用的初始化数据属都是子类的

本人现在的研究方向是:
图像的语义分割,如果有志同道合的朋友,可以组队学习
haiyangpengai@gmail.com qq:1355365561

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值