Python 中以双下划线开头跟结尾方法称为 magic method 即 魔法方法,我之前总结过一些常用的给你参考:__new__ && __init__
他们之间的关系是面试中经常会出现的问题。__new__ 跟 __init__ 的分工很明确: __new__ 是新建对象时被第一个调用的方法,它会构造一个对象并返回,__init__ 接收构造的对象并对其进行初始化。
class A:
def __new__(cls):
print ("A.__new__ called")
return super(A, cls).__new__(cls)
def __init__(self):
print ("A.__init__ called")
A()
输出:
A.__new__ called
A.__init__ called
假设 __new__ 没有返回值的话那么 __init__ 也不会被调用:
class A:
def __new__(cls):
print ("A.__new__ called")
# return super(A, cls).__new__(cls)
def __init__(self):
print ("A.__init__ called")
A() # A.__new__ called
__init__ 只能返回None,否则报错:
class A:
def __init__(self):<