gpt4 book ai didi

python - 类初始化

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:35 24 4
gpt4 key购买 nike

我只是有一个关于初始化的小问题。在Python中,当我们进行乘法继承时,调用子类的 super 函数和单独调用它们有什么区别?

classA(B,C)

super(A,self).__init__()

#---and---#

B.__init__(self)
C.__init__(self)

谢谢

最佳答案

主要区别在于,如果类 B 和 C 有一个共同的祖先,则通过 super() 调用,该祖先的 __init__() 将仅被调用一次。通过像示例中那样显式调用父级的 __init__() 方法,共同祖先的 __init__() 最终将被调用两次。

您可以从 Guido's explanation 阅读有关 super() 如何实现此目的的信息。 .

下面演示了对父级 __init__() 的显式调用以及它如何调用共同祖先两次:

>>> class A(object):
... def __init__(self):
... print "A"
...
>>> class B(A):
... def __init__(self):
... A.__init__(self)
... print "B"
...
>>> class C(A):
... def __init__(self):
... A.__init__(self)
... print "C"
...
>>> class D(B,C):
... def __init__(self):
... B.__init__(self)
... C.__init__(self)
... print "D"
...
>>> D()
A
B
A
C
D
<__main__.D object at 0x106de1d10>
>>>

这就是 super() 发生的情况

>>> class A(object):
... def __init__(self):
... print "A"
...
>>> class B(A):
... def __init__(self):
... super(B,self).__init__()
... print "B"
...
>>> class C(A):
... def __init__(self):
... super(C,self).__init__()
... print "C"
...
>>> class D(B,C):
... def __init__(self):
... super(D,self).__init__()
... print "D"
...
>>> D()
A
C
B
D
<__main__.D object at 0x10d34ec90>
>>>

关于python - 类初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15069942/

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