gpt4 book ai didi

python - 为什么 super(A, self).__init__() 不调用 A 的 __init__() ?

转载 作者:行者123 更新时间:2023-12-01 02:50:49 30 4
gpt4 key购买 nike

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的构造函数,因此应该打印“A.init()”。

我读过一些关于 super() 的其他问题但我认为他们没有准确回答我的问题。

我的Python是3.5.3。

最佳答案

您没有得到预期结果的原因是您正在调用 A 父类的 __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。请参阅Section 3.3 New-style and old-style classes有关更详细的概述,请参阅 Python 2 的文档。

关于python - 为什么 super(A, self).__init__() 不调用 A 的 __init__() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44810624/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com