如何解决为什么不自动调用超类 __init__ 方法??

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

基本上,初始化程序的超类委派在 Python 中不是自动的,原因完全相同,这样的委派对于
其他方法也不是自动的——请注意,那些“其他语言”不会对任何其他方法进行自动超类委派其他方法……
用于构造函数(如果适用,析构函数),正如我所提到的,这 Python
__init__。(的行为__new__也很奇特,虽然实际上与您的问题没有直接关系,因为__new__它是一个如此奇特的构造函数,它实际上并不一定需要构造任何东西——可以很好地返回一个现有的实例,甚至是一个非实例…
显然 Python 为您提供了 比您想到的“其他语言”更多地控制机制,其中 包括本身没有自动委派__new__!-)。

解决方法

为什么 Python
设计者决定子类的__init__()方法不会__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'