参考:https://baijiahao.baidu.com/s?id=1609386059712096379&wfr=spider&for=pc
在学习单例模式时,看到了 __init__和 __new__,大致总结一下区别:
1、继承自object的新式类才有new
2、new至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供
3、new必须要有返回值,返回实例化出来的实例,这点在自己实现new时要特别注意,可以return父类new出来的实例,或者直接是object的new出来的实例----------return object.__new__(A, *args, **kwargs)
4、init有一个参数self,就是这个new返回的实例,init在new的基础上可以完成一些其它初始化的动作,init不需要返回值
5、若new没有正确返回当前类cls的实例,那init是不会被调用的,即使是父类的实例也不行
6、__new__在__init__执行之前,并且经常作为metaclass