Python中多继承与super()用法
Python类分为两种,一种叫经典类,一种叫新式类。两种都支持多继承。
情形一:
B继承于A,C继承于A和B
python"># 经典类class A():
def __init__(self):
print "A"
class B(A):
def __init__(self):
A.__init__(self)
print "B"
class C(B, A):
def __init__(self):
A.__init__(self)
B.__init__(self)
print "C"
C需要调用父类的init()函数时,前者会导致父类A的init()函数被调用2次,效率不高,而且不符合DRY原则,因此有了下面的新方法
# 新式类class A(object):
def __init__(self):
print "A"
class B(A):
def __init__(self):
super(B, self).__init__()
print "B"
class C(B, A):
def __init__(self):
super(C, self).__init__()
print "C"
采用super()方式时,会自动找到第一个多继承中的第一个父类,那就不用调用两次了
情形二:
B继承于A,D继承于C和B
class A(object): def __init__(self):
print "A"
class B(A):
def __init__(self):
super(B, self).__init__()
print "B"
class C(object):
def __init__(self):
print "C"
class D(B, C):
def __init__(self):
super(B, self).__init__()
C.__init__(self)
print "B"
两个类的初始化不同,而只有B需要追溯父类使用super(),另一个就要沿用旧方法才能初始化
情形三:
菱形继承,B继承于A,C继承于A,D继承B和C
class A(): def __init__(self):
print("enter A")
print("leave A")
class B(A):
def __init__(self):
print("enter B")
super().__init__()
print("leave B")
class C(A):
def __init__(self):
print("enter C")
super().__init__()
print("leave C")
class D(B, C):
def __init__(self):
print("enter D")
super().__init__()
print("leave D")
d = D()
使用 super() 可以很好地避免构造函数被调用两次的问题
##实验测试了情形一和情形二,如有修改或错误地方,还望大虾指正
Reference:
https://www.jackyshen.com/2015/08/19/multi-inheritance-with-super-in-Python/
https://www.runoob.com/python/python-func-super.html
以上是 Python中多继承与super()用法 的全部内容, 来源链接: utcz.com/z/513182.html