【发布时间】:2021-08-20 08:09:10
【问题描述】:
我有一个类似下面的代码。我试图测试 python 的多重继承行为。我有一个名为 Base 的基类,当 D3 派生自 D1、D2 时,D1 和 D2 派生自基类。 我首先初始化 D2,然后从 D3 初始化 D1。我用 val= 1 初始化 D3 ,用 D3.val+2 初始化 D2 ,用 D3.val+4 初始化 D1 。但是当我打印所有类的 init 值时,我注意到 D1 正在临时初始化为 3。
`
class Base:
def __init__(self,val):
print ("Base __init__",val)
self.b_data = val
def whoami(self):
print ("I am Base")
def val(self):
print ("val of Base",self.b_data)
def __del__(self):
print ("Deleting Base")
class D1(Base):
def __init__(self,val):
print ("D1 __init__",val)
self.d1_data = val
super().__init__(self.d1_data)
def whoami(self):
print ("I am D1")
def __del__(self):
print ("Deleting D1")
class D2(Base):
def __init__(self,val):
print ("D2 __init__",val)
self.d2_data = val +2
super().__init__(self.d2_data)
def whoami(self):
print ("I am D2")
def __del__(self):
print ("Deleting D2")
class D3(D2,D1):
def __init__(self,val):
print ("D3 __init__",val)
self.d3_data = val
super().__init__(self.d3_data) #callig D2 init
super(D2,self).__init__(self.d3_data+4) #calling D1 init
#D2.__init__(self,100)
def __del__(self):
print ("Deleting D3")
if( __name__ == "__main__"):
objD3 = D3(1)
print ((objD3.__class__.__mro__))
objD3.val()
objD3.whoami()
`
但是当我运行它时,结果显示为
D3 __init__ 1
D2 __init__ 1
D1 __init__ 3
Base __init__ 3
D1 __init__ 5
Base __init__ 5
(<class '__main__.D3'>, <class '__main__.D2'>, <class '__main__.D1'>, <class '__main__.Base'>, <class 'object'>)
val of Base 5
I am D2
Deleting D3
你能帮我理解为什么在第三行打印D1 __ init__ 3,当我没有用值 3 初始化 D1 时?
【问题讨论】: