为什么 __init__() 总是先于 __new__() 在 Python 中被调用?


Python 拥有特殊类型的方法,称为魔术方法,名称带下划线且下划线连在一起。

如果我们想讨论魔术方法 __new__,那么显然需要也讨论 __init__ 方法。当实例被创建时,将调用魔术方法 __new__,而当创建实例时,将调用 __init__ 方法来初始化实例。

示例

 实时演示

class X():
_dict = dict()

def __new__(self):
if 'data' in X._dict:
print ("new instance Exists")
return X._dict['data']
else:
print ("magic method New")
return super(X, self).__new__(self)

def __init__(self):
print ("instantiation")
X._dict['data'] = self
print ("")

a1 = X()
a2 = X()
a3 = X()

输出

magic method New
instantiation

new instance Exists
instantiation

new instance Exists
instantiation

要记住的重要事项:__init__ 函数称为构造函数或初始化器,并且在创建类的实例时自动调用它。

更新日期: 2019-07-30

253 次浏览

开启你的职业生涯

通过完成课程来获得认证

开始
广告