__new__和__init__ 的区别?
时间: 2023-10-23 20:12:10 浏览: 37
__new__ 和 __init__ 是 Python 中用于创建和初始化对象的特殊方法。
__new__ 方法是一个类级别的方法,它在创建一个新对象之前被调用。它的主要作用是创建一个实例对象,并返回该实例对象。__new__ 方法通常由元类(metaclass)来调用,它负责实际的对象创建过程。
__init__ 方法是一个实例级别的方法,它在对象创建之后被调用。它的主要作用是对对象进行初始化操作,例如设置实例变量的初始值或执行一些必要的设置。__init__ 方法不返回任何值。
在创建一个对象时,Python 首先会调用 __new__ 方法创建实例对象,然后再调用 __init__ 方法对对象进行初始化。这意味着 __new__ 方法负责创建对象,而 __init__ 方法负责初始化对象。
总结起来,__new__ 方法用于创建实例对象,而 __init__ 方法用于初始化实例对象。
相关问题
_init_ 和_new_
`__init__`和`__new__`都是Python中用于创建对象的特殊方法。
`__new__`方法是用来创建对象并返回该对象的实例。在对象被创建之前调用`__new__`方法,它是一个类方法,第一个参数是这个类本身。`__new__`方法应该返回一个新的实例对象,这个实例对象会被`__init__`方法接收并初始化。
`__init__`方法是用来初始化对象的方法,当一个新的实例对象被创建时,`__init__`方法会被调用,以完成对象的初始化。`__init__`方法的第一个参数是self,表示调用该方法的对象实例本身,之后的参数是传递给该方法的其他参数。
简单来说,`__new__`方法用于创建对象,`__init__`方法用于初始化对象。`__new__`方法先于`__init__`方法被调用,`__new__`方法返回的是一个实例对象,它会被传递给`__init__`方法,`__init__`方法在这个实例对象上进行初始化。
__new__和__init__的区别?
__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
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)