35. "__init__"和"__new__"有何区别 ------------------------------------- __init__方法的用途是什么 '''''''''''''''''''''''''' __init__初始化类对象时使用,它至少需要一个self参数。它在生成对象之后, 对对象的成员变量进行赋值。__init__函数不应当返回任何值,即返回为None __init__函数不需要显式调用,他是在调用类名()时被自动调用。 实例方法的第一个参数为self, 这个self相当于c++语言中的this指针。self 变量用于在类实例方法 中引用方法所绑定的实例 __new__方法的用途是什么 '''''''''''''''''''''''''' 调用它来创建类的新实例,__new__方法是一个静态方法,它返回对象的实例。 如果不返回对象的实例, __init__方法将不会调用到。它用于子类来修改类实例的创建。 * 1,__new__ 在 __init__之前调用 * 2,__new__调用时对象还未创建,调用完成后,返回对象。因此传递的参数是类对象。返回类的实例。 * 3,__init__ 在类的实例创建之后自动调用,对类的实例内部进行初始化的过程。它不返回值。 * 4,__new__通常用于扩展内部类型时使用 :: class Book: def __new__(cls): print("__new__ is call"); return super().__new__(cls) def __init__(self): print("__init__ is call"); b = Book() 输出为:: __new__ is call __init__ is call 我们可以看到__new__函数先调用, __init__函数后调用。