为什么super(A,self).__ init __()没有调用A的__init __()?

时间:2017-06-28 19:04:45

标签: python python-3.x super

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。

1 个答案:

答案 0 :(得分:2)

您没有得到预期的原因是因为您正在调用 __init__() 父类的A函数 - {{1} } - 所以永远不会调用object' s A。您需要__init__()来调用super(D, self).__init__()的父类D的构造函数:

A

另请注意,在Python 3中,您不再需要显式继承>>> 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> >>> 。默认情况下,所有类都继承自object。有关更详细的概述,请参阅Python 2&nbsp;文档中的Section 3.3 New-style and old-style classes