在调用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__
方法内部,那么我们甚至还没有完成构造基础对象,那么我们怎么能调用派生对象?方法)?
答案 0 :(得分:0)
__init__
返回后, __new__
被称为。即obj = B()
大约等于
obj = B.__new__(B) # create the new object
obj.__init__() # initialize it
通常,类不会覆盖__new__
;它只是顺应object.__new__
。 (即使确实定义了__new__
,也必须确保object.__new__
最终被调用。)