Python的__new__
方法
Python的__new__
和__init__
的区别
先看一段代码
#-*- coding:utf8 -*-
"""
>>> A()
new <class '__main__.A'>
init
<__main__.A object at 0x02473A30>
"""
class A(object):
def __init__(self):
print("init")
def __new__(cls, *args, **kw):
print("new %s" % cls)
return object.__new__(cls, *args, **kw)
- 从代码中可以看出来,
__new__
先于__init__
执行,也就是说,__new__
先搭建了类的基本框架和原料,__init__
进行了初始化,即对类实例进行装配。在这一点上,感觉__new__
有点像元类__metaclass__
,至于元类,在以后的篇幅里会有介绍。 - 注意
__new__
是静态方法,无论有没有静态方法装饰器。所以,在其中初始化的是静态变量。这就为实现单例模式提供了温床。