python中的__new__和__init__的区别
时间: 2023-11-22 22:47:14 浏览: 95
在Python中,__new__和__init__都是用于创建类实例的方法,但它们的作用不同。__new__是用于创建实例的方法,它返回一个新的实例对象。而__init__是用于初始化实例的方法,它在__new__方法创建实例后被调用,用于设置实例的属性值等操作。
具体来说,__new__方法是一个类方法,它的第一个参数是cls,表示要创建的类,__new__方法返回一个新的实例对象。__init__方法是一个实例方法,它的第一个参数是self,表示要初始化的实例对象,__init__方法不需要返回值。
当创建一个类的实例时,Python会先调用__new__方法创建实例对象,然后再调用__init__方法初始化实例对象。如果__new__方法返回的不是当前类的实例对象,那么__init__方法就不会被调用。
举个例子,如果我们定义一个类ClsTest,同时实现__new__和__init__方法,那么在创建ClsTest实例时,Python会先调用__new__方法创建实例对象,然后再调用__init__方法初始化实例对象。具体代码如下:
```
class ClsTest(object):
def __init__(self):
print("init")
def __new__(cls,*args, **kwargs):
print("new")
return super().__new__(cls,*args, **kwargs)
ClsTest()
```
输出结果为:
```
new
init
```
阅读全文