簡體   English   中英

為什么super(A,self).__ init __()不調用A的__init __()?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM