我有以下代码:
class Demo:
def __new__(self):
self.__init__(self)
print("Demo's __new__() invoked")
def __init__(self):
print("Demo's __init__() invoked")
class Derived_Demo(Demo):
def __new__(self):
print("Derived_Demo's __new__() invoked")
def __init__(self):
print("Derived_Demo's __init__() invoked")
def main():
obj1 = Derived_Demo()
obj2 = Demo()
main()
我试图理解执行顺序:
派生类中的__new__首先被调用
为什么派生类中的_init_不调用next?
根据您所看到的输出,这是一个执行顺序,应该更有意义。
"Derived_Demo's __new__() invoked"
- 因为您调用 Derived_Demo
,并且 __new__
始终会首先被调用。Derived_Demo.__new__
返回None
,意思是在到达Derived_Demo.__init__
之前,obj1
是None
(放一个print(obj1) immidately after it is defined to see
)。"Demo's __init__() invoked"
- 因为首先调用 Demo.__new__
,但你在 __init__
中显式调用 __new__
(这是一种反模式,但 Python 并不禁止它)。"Demo's __new__() invoked"
- 预计在 __init__
被调用后。