一、init 方法是什么?
init 方法通常用在初始化一个类实例的时候。例如:
这是init最常见的用法。但init其实不是实例化一个类的时候第一个被调用 的方法。当使用 Persion(name,age,sex) 这样的表达式来实例化一个类时,最先被调用的方法 其实是 new 方法。
二、new 方法是什么?
new方法接受的参数虽然也是和init一样,但init是在类实例创建之后调用,而 new方法正是创建这个类实例的方法。
输出结果为:
通过运行这段代码,我们可以看到,new方法的调用是发生在init之前的。其实当 你实例化一个类的时候,具体的执行逻辑是这样的:
所以,initnew 最主要的区别在于:
- init 通常用于初始化一个新的实例,控制这个初始化的过程,比如添加一些属性, 做一些额外的操作,发生在类实例被创建完以后。它是实例级别的方法。
- newnew方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径。还有就是实现自定义的metaclass