__new__方法是用来创建对象的,而__init__方法是用来初始化类对象的,因此__new__方法的会先于__init__方法执行。 __new__方法可以用来实现python中的单例设计模式,但是在Python3中,__new__方法的写法有所改变:
class User(object):
__instance
= None
def __new__(cls
, *args
, **kwargs
):
if not cls
.__instance
:
cls
.__instance
= super(User
, cls
).__new__
(cls
)
return cls
.__instance
def __init__(self
, name
):
self
.name
= name
如果仍然用python2的旧写法,程序会报错TypeError: object.__new__() takes no arguments