__new__和__init__的区别?
时间: 2023-12-17 08:05:22 浏览: 67
__new__和__init__都是Python中用于创建对象的特殊方法,二者的区别如下:
1. __new__是一个静态方法,而__init__是一个实例方法。
2. __new__方法会返回一个创建的实例,而__init__什么都不返回。
3. 执行顺序的不同:只有在__new__返回一个cls的实例时后面的__init__才能被调用。
4. 功能上的不同:当创建一个新实例时调用__new__,初始化一个实例时用__init__。
__new__方法是在一个对象实例化的时候所调用的第一个方法,它的第一个参数是这个类,其他的参数是用来直接传递给__init__方法。__new__方法的返回值是一个新的对象实例(通常是cls的实例)。
__init__方法是当一个新的对象实例被创建后调用的方法,它的第一个参数是self,其他的参数是在__new__方法中传递过来的。__init__方法不需要返回任何值,它的主要作用是初始化新创建的实例。
下面是一个简单的例子,演示了__new__和__init__的区别:
```python
class MyClass:
def __new__(cls, *args, **kwargs):
print("__new__ called")
instance = super().__new__(cls)
return instance
def __init__(self, *args, **kwargs):
print("__init__ called")
self.my_var = args[0]
my_obj = MyClass("Hello World")
print(my_obj.my_var)
```
输出结果为:
```
__new__ called
__init__ called
Hello World
```
阅读全文