Python2 和 Python3:__init__ 和 __new__

Python2 and Python3: __init__ and __new__

我已经阅读了其他解释 __init____new__ 之间区别的问题,但我只是不明白为什么在下面的代码中 python 2 out:

init

和Python3:

new
init

示例代码:

class ExampleClass():
    def __new__(cls):
        print ("new")
        return super().__new__(cls)

    def __init__(self):
        print ("init")

example = ExampleClass()

要在 Python 2.x 中使用 __new__,class 应该是 new-style class(class 来自 object ).

并且对 super() 的调用不同于对 Python 3.x 的调用。

class ExampleClass(object):  # <---
    def __new__(cls):
        print("new")
        return super(ExampleClass, cls).__new__(cls)  # <---

    def __init__(self):
        print("init")