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")
我已经阅读了其他解释 __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")