Python的super(),到底发生了什么?

这个问题在这里已经有了答案:

  • 用__init __()方法理解Python super()7个答案

  • __init__不是构造函数,它是一个初始值设定项 。 到__init__被调用时,对象已经被构建(通过__new__ )。 所以你只能得到一个对象,但它被初始化了两次 - 例如, ElectricCar.__init__可能决定在Car.__init__被运行后重新初始化self.model

    当调用super() ,在当前实例的上下文中查找适当的基类。 基本上,在您的示例中, super().__init__(make, model, year)可以重写为Car.__init__(self, make, model, year)

    这就是为什么在早期版本的python中,调用实际上是super(ElectricCar, self) - 它查找当前类的基类( ElectricCar )并使用当前实例( self ),就好像它是该类的一个实例。

    请注意,初始化并不意味着准备对象,它意味着准备对象的状态。 即使它没有实现__init__对象也是完全有效的。


    澄清:当你打电话给ElectricCar() ,实际执行的内容接近于:

    that_object = ElectricCar.__new__()  # this will actually use object.__new__
    if isinstance(that_object, ElectricCar):
        ElectricCar.__init__(that_object)
    return that_object
    

    这意味着您有一个对象来自ElectricCar.__new__ 。 对ElectricCar.__init__的调用只会修改/初始化该对象。 它可以使用其他函数,如Car.__init__

    链接地址: http://www.djcxy.com/p/30039.html

    上一篇: Python's super() , what exactly happens?

    下一篇: Python basic inheritance