pythonにおけるsuperの使い方[探索4]

10438 ワード

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__()は機能しません.継承に使用する初期化データはすべてサブクラスです.
私の今の研究の方向は:画像の意味の分割、もし志を同じくする友达があれば、チームを组んで学ぶことができます[email protected] qq:1355365561