__new__与__init__的区别

__new__  : 控制对象的实例化过程 , 在__init__方法之前调用

__init__ : 对象实例化对象进行属性设置

class User:
    def __new__(cls, *args, **kwargs):
        """控制对象的创建的过程,在__init__方法之前调用"""
        print('invoke __new__')
        return super().__new__(cls)  # 需要返回cls, 不然是不会调用__init__方法

    def __init__(self, name):
        """控制对象的属性操作,在调用该方法时,对象已经初始化完成,只是属性还没完善"""
        print('invoke __init__')
        self.name = name


if __name__ == '__main__':
    user = User('admin')

打印结果:

C:UserszhengqinfengAppDataLocalProgramsPythonPython37python.exe E:/ws/python/LearnFlask/test/mooic/new_init.py
invoke __new__
invoke __init__

Process finished with exit code 0
原文地址:https://www.cnblogs.com/z-qinfeng/p/12041594.html