Python super()函数使用及多重继承
super()函数可以用于继承父类的方法,语法如下:
super(type[,object-or-type])
虽然super()函数的使用比较简单,但是需要根据单继承和多继承来分析函数的调用关系。
首先,当类之间的继承关系为单继承时,函数调用关系也比较简单,可以参考如下的例子:
#!/usr/bin/envpython3 classA(object): def__init__(self): print('classA') classB(A): def__init__(self): super(B,self).__init__() print('classB') b=B()
上述代码运行结果如下:
classA
classB
从结果可以看出,子类B在实例化时调用了父类A的__init__()方法。
当进行多重继承时,需要考虑MRO的问题。所谓MRO,即MethodResolutionOrder,自Python2.3以来,MRO采用广度优先(区别于深度优先)的规则定义。为了更好的理解这个问题,让我们先来看如下的代码:
#!/usr/bin/envpython3 classA(object): def__init__(self): self.n=10 defminus(self,m): print('minusinclassAstart') self.n-=m print('minusinclassAend') classB(A): def__init__(self): self.n=7 defminus(self,m): print('minusinclassBstart') super(B,self).minus(m) self.n-=2 print('minusinclassBend') classC(A): def__init__(self): self.n=12 defminus(self,m): print('minusinclassCstart') super(C,self).minus(m) self.n-=5 print('minusinclassCend') classD(B,C): def__init__(self): self.n=15 defminus(self,m): print('minusinclassDstart') super(D,self).minus(m) self.n-=2 print('minusinclassDend') print('TheMROofclassDis:') print(D.__mro__) d=D() d.minus(2) print(d.n)
代码运行结果:
TheMROofclassDis:
(, , , , )
minusinclassDstart
minusinclassBstart
minusinclassCstart
minusinclassAstart
minusinclassAend
minusinclassCend
minusinclassBend
minusinclassDend
4
从运行结果可以看出,子类D的MRO为(
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。