Python2和Python3:__ init__和__new__

时间:2015-08-02 13:49:33

标签: python python-3.x python-2.x init super

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

init

和Python3:

new
init

示例代码:

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

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

example = ExampleClass()

1 个答案:

答案 0 :(得分:7)

要在Python 2.x中使用__new__,该类应为new-style 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")