# 支持多继承的面向对象编程都可能会导致钻石继承(菱形继承)问题,看以下代码:
class A():
def __init__(self):
print("进入A…")
print("离开A…")
class B(A):
def __init__(self):
print("进入B…")
A.__init__(self)
print("离开B…")
class C(A):
def __init__(self):
print("进入C…")
A.__init__(self)
print("离开C…")
class D(B, C):
def __init__(self):
print("进入D…")
B.__init__(self)
C.__init__(self)
print("离开D…")
结果显示为:
>>>d = D()
进入D…
进入B…
进入A…
离开A…
离开B…
进入C…
进入A…
离开A…
离开C…
离开D…

A进了两次,现做优化:
#此时召唤super大神!!!
class A():
def __init__(self):
print("进入A…")
print("离开A…")
class B(A):
def __init__(self):
print("进入B…")
super().__init__()
print("离开B…")
class C(A):
def __init__(self):
print("进入C…")
super().__init__()
print("离开C…")
class D(B, C):
def __init__(self):
print("进入D…")
super().__init__()
print("离开D…")
结果显示为:
>>>d = D()
进入D…
进入B…
进入C…
进入A…
离开A…
离开C…
离开B…
离开D…
本文探讨了多继承在面向对象编程中可能引发的钻石继承问题,并通过使用super()方法进行了优化,避免了基类构造函数被多次调用的问题。
4万+

被折叠的 条评论
为什么被折叠?



