__int__()和__new()__的区别
时间: 2023-07-21 15:06:19 浏览: 44
`__init__()` 和 `__new__()` 是 Python 中的两个特殊方法,用于创建和初始化对象。它们的主要区别如下:
1. `__new__()` 是一个用于创建对象的静态方法,它在对象实例化之前调用。它的作用是创建并返回一个新的对象实例。`__new__()` 方法的第一个参数是类本身(通常为 `cls`),后面的参数是传递给 `__init__()` 方法的参数。
2. `__init__()` 是一个初始化方法,它在对象实例化后调用。它用于设置对象的初始状态,并接收传递给构造函数的参数。`__init__()` 方法不返回任何值,它只是在对象创建后对其进行初始化。
简而言之,`__new__()` 负责创建对象并返回实例,而 `__init__()` 负责初始化对象的状态。
下面是一个示例,演示了 `__new__()` 和 `__init__()` 的使用:
```python
class MyClass:
def __new__(cls, *args, **kwargs):
print("Creating new instance")
instance = super().__new__(cls)
return instance
def __init__(self, *args, **kwargs):
print("Initializing instance")
self.name = kwargs.get('name', 'Unknown')
obj = MyClass(name='John')
```
在上述示例中,当创建 `MyClass` 的实例时,`__new__()` 方法首先被调用,然后调用 `__init__()` 方法进行初始化。`__new__()` 方法返回一个实例,然后将该实例作为第一个参数传递给 `__init__()` 方法。输出结果如下:
```
Creating new instance
Initializing instance
```
可以看到,`__new__()` 方法在 `__init__()` 方法之前被调用。
需要注意的是,一般情况下不需要自己实现 `__new__()` 方法,而是使用继承自基类的默认实现。`__init__()` 方法通常用于初始化对象的属性和状态。