1. class Student(object):
    2. def __new__(cls, *args, **kwargs):
    3. """这个相当于Java当中的构造函数"""
    4. print(cls) # 类本身 <class'__main__.Student'>
    5. print('---------new--------------')
    6. obj = super().__new__(cls) # __new__创造出了对象
    7. print(obj)
    8. # <__main__.Student object at 0x00000000021C9C88>
    9. print(obj.__dict__) # {}
    10. return obj
    11. def __init__(self, name, age):
    12. """创建完实例对象之后,才会调用__init__."""
    13. print(self)
    14. #<__main__.Student object at 0x00000000021C9C88>
    15. print('------------init----------')
    16. self.name = name
    17. self.age = age

    注意:new更像是其他语言当中的构造函数,必须有返回值,返回值实例化的对象,init只是初始化构造函数,必须没有返回
    值,仅仅只是初始化功能,并不能 new 创建对象
    在实例化对象的时候函数的调用顺序依次是call==>new==>init.