在派生类完全构建之前调用了派生方法吗?

时间:2018-07-19 14:12:55

标签: python

在调用30方法调用派生的multiply方法之后,以下代码显示multiply

class A:
    def __init__(self):
        self.multiply(15)
        print(self.i)

    def multiply(self, i):
        self.i = 4 * i


class B(A):
    def __init__(self):
        super().__init__()

    def multiply(self, i):
        self.i = 2 * i


    obj = B()

首先调用super().__init__(),然后,由于multiply被覆盖,派生的multiply方法被调用。

如果对象甚至没有完全构造,怎么可能(如果我们在基类的__init__方法内部,那么我们甚至还没有完成构造基础对象,那么我们怎么能调用派生对象?方法)?

1 个答案:

答案 0 :(得分:0)

__init__返回后,

__new__被称为。即obj = B()大约等于

obj = B.__new__(B)  # create the new object
obj.__init__()      # initialize it

通常,类不会覆盖__new__;它只是顺应object.__new__。 (即使确实定义了__new__,也必须确保object.__new__最终被调用。)