知行编程网知行编程网  2022-09-27 19:00 知行编程网 隐藏边栏  1 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python中__new__()和__init__()有什么区别?的相关知识,包括js中init方法,以及java中init什么意思这些编程知识,希望对大家有参考作用。

其中,__new__() 不是必须的,只有继承自 object 的类才有。该方法可以返回父类的实例(通过 super(current class name, cls).__new__()),或者直接将对象 _new__ 的 _ 从实例中返回。值得注意的是,在定义子类而不重新定义__new__()时,Python默认调用该类的父类的__new__()方法来构造该类的实例,如果父类没有覆盖__new__(),那么它会一直追溯到object的__new__()方法,因为object是所有new-style类的基类。如果 __new__() 方法在子类中被覆盖,则可以自由选择任何其他新式类。

Python 中的 __new__() 和 __init__() 有什么区别?

可以看出,当类中同时出现__new__()和__init__()时,先调用__new__(),再调用__init__()。具体执行流程为:

1. 调用实例对象代码xiaoming = Student('xiaoming',175);

2.传入name和height的参数,执行Student类的__new__()方法,返回该类的一个实例,一般由父类super(Student,cls).__new__(cls)生成, __new__() 实例是 __init__() 的自身;

3. 用实例来调用__init__()方法,进行初始化实例对象的操作。

可以看到,

python中__new__()与__init__()的区别

1.首先,用法不同。 __new__() 用于创建实例,因此在创建实例之前调用此方法。它是类级别的方法和静态方法;

而__init__()是用来初始化实例的,所以这个方法是在实例对象创建后调用的。它是一个实例级的方法,用于设置对象属性的一些初始值。

由此可知,__new__()在__init__() 之前被调用。如果__new__() 创建的是当前类的实例,会自动调用__init__()函数,通过return调用的__new__()的参数cls来保证是当前类实例,如果是其他类的类名,那么创建返回的是其他类实例,就不会调用当前类的__init__()函数。

2.其次传入参数不同

__new__() 至少有一个参数cls,代表当前类,实例化时被Python解释器自动识别;

__init__()至少有一个参数self,就是这个__new__()返回的实例,__init__()在__new__()的基础上完成了一些初始化操作。

3.返回值不同

__new__()必须有返回值,返回实例对象;

__init__()不需要返回值。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享