gpt4 book ai didi

python - 为什么不自动调用父类(super class) __init__ 方法?

转载 作者:IT老高 更新时间:2023-10-28 12:26:39 24 4
gpt4 key购买 nike

为什么 Python 设计者决定子类的 __init__() 方法不会像在其他一些语言中那样自动调用其父类(super class)的 __init__() 方法? Pythonic和推荐的成语真的像下面这样吗?

class Superclass(object):
def __init__(self):
print 'Do something'

class Subclass(Superclass):
def __init__(self):
super(Subclass, self).__init__()
print 'Do something else'

最佳答案

Python 的 __init__ 与其他语言 constructors 的关键区别在于 __init__ 不是 构造函数:它是一个 initializer(实际的 constructor(如果有的话,但是,请看后文;-)是 __new__ 并且工作方式完全不同)。虽然构造所有父类(super class)(毫无疑问,在你继续向下构造“之前”这样做)显然是说你正在构造子类的实例的一部分,这显然是初始化的情况并非如此,因为在许多用例中,父类(super class)的初始化需要被跳过、更改、控制——如果有的话,发生在子类初始化的“中间”,等等。

基本上,初始化器的父类(super class)委托(delegate)在 Python 中不是自动的,原因完全相同,对于任何其他方法,这种委托(delegate)也不是自动的——请注意,那些“其他语言”不会' 也不为任何其他方法执行自动父类(super class)委托(delegate)... 只是 用于构造函数(如果适用,还有析构函数),正如我所提到的,它不是 Python 的 __init__ 是什么。 ( __new__ 的行为也很奇特,尽管实际上与您的问题没有直接关系,因为 __new__ 是一个非常特殊的构造函数,它实际上并不一定需要构造任何东西-- 可以很好地返回一个现有的实例,甚至是一个非实例......显然 Python 为您提供了很多比您想到的“其他语言”更多的机制控制,这 < em>也包括在 __new__ 本身中没有自动委托(delegate)!-)。

关于python - 为什么不自动调用父类(super class) __init__ 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3782827/

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