[英]Why super(A, self).__init__() doesn't call A's __init__()?
class A(object):
def __init__(self):
print('A.__init__()')
class D(A):
def __init__(self):
super(A, self).__init__()
print('D.__init__()')
D()
輸出為:
D.__init__()
這對我來說是意外的。 根據我的理解, super(A, self).__init__()
應該調用A
的ctor,因此應該打印“ A. init ()”。
我已經閱讀了有關super()
其他一些問題,但我認為它們不能完全回答我的問題。
我的python是3.5.3。
無法獲得期望的原因是因為您正在調用A
的父類的__init__()
函數__init__()
這是object
,因此永遠不會調用A
的__init__()
。 您需要做super(D, self).__init__()
來調用D
的父類A
的構造函數:
>>> class A(object):
def __init__(self):
print('A.__init__()')
>>> class D(A):
def __init__(self):
super(D, self).__init__() # Change A to D
print('D.__init__()')
>>> D()
A.__init__()
D.__init__()
<__main__.D object at 0x7fecc5bbcf60>
>>>
另外,請注意,在Python 3中,您不再需要顯式繼承自object
。 默認情況下,所有類都從object
繼承。 有關更詳細的概述,請參見Python 2的文檔中的3.3新風格和舊風格的類 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.