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。
答案 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。