new
__new__(cls, *args, **kwargs)
用于创建cls类的一个实例,并将该实例返回给_init__(self)
该方法只有在基于object的新生类中重写,
不能返回该新生类的__new__,否则会造成无限循环
__init__(self)实例化self这个对像,不能有返回值
两个方法都存在时会优先调用__new__
class S(object):
def __new__(cls, *args, **kwargs):
print('new')
def __init__(self):
print('init')
s=S()
new
存在__new__有返回值的时候,隐式调用__init__
同时__new__的返回值不能是本身类的__new__
class S(object):
def __new__(cls, *args, **kwargs):
print('new')
return object.__new__(cls, *args, **kwargs)
def __init__(self):
print('init')
s=S()
new
init