“__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__函数后调用。