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为(
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。