为什么’t Python’超类__init__方法自动调用?

问题:

为什么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'

回答:

Python的__init__与其他语言建设者之间的关键区别在于__init__一个构造函数:它是一个初始化(实际的构造函数(如果有的话,但是稍后再看;-) __new__,再次完全不同)。虽然建设所有的超类(并且毫无疑问地这样做“之前”你继续向下构造)显然是说你是建设一个子类的实例,这显然不是初始化的情况,因为那里有很多用例,其中超类的初始化需要被跳过,改变,控制 – 发生,如果有的话,“中间”的子类初始化等等。
基本上,初始化器的超类委派在Python中不是自动的,因为完全相同的原因,这种委托对于任何其他方法也不是自动的 – 请注意,这些“其他语言”不执行自动超类委派对于任何其他方法,对于构造函数(如果适用的话,析构函数),… just,正如我所提到的那样,Python的__init__。 (__new__的行为也是非常奇特的,尽管与你的问题真的没有直接关系,因为__new__是一个这样一个特殊的构造函数,它实际上不一定需要构造任何东西 – 可以很好地返回一个现有的实例,甚至是非实例…显然,Python为您提供了批量更多的力量控制,而不是您所想到的“其他语言”,also包括在__new__本身没有自动授权! 。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Why aren’t Python’s superclass __init__ methods automatically invoked?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

1 + 8 =