python类中的__init__和_new的区别
时间: 2023-10-25 18:09:18 浏览: 43
在 Python 中,类是用来创建对象的模板。`__init__` 和 `__new__` 都是用来创建类的实例的方法,但它们的作用不同。
`__new__` 方法是在一个对象实例被创建之前调用的。它的作用是创建并返回这个实例。`__new__` 方法通常用于自定义不可变类型的实例,比如元组和字符串。`__new__` 方法必须返回一个实例,否则 `__init__` 方法将不会被调用。
`__init__` 方法是在一个对象实例被创建之后调用的。它的作用是初始化这个实例。`__init__` 方法通常用于设置实例的属性、状态和其他一些初始化操作。`__init__` 方法不需要返回值,因为它的返回值会被忽略。
简单来说,`__new__` 方法是创建一个实例,而 `__init__` 方法是初始化这个实例。通常情况下,我们只需要重写 `__init__` 方法就可以了,因为 `__new__` 方法很少使用。
相关问题
python中的__new__和__init__的区别
在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
```
对于python中__new__和__init__的区别
__new__和__init__是Python中的两个特殊方法,用于对象的创建和初始化。
__new__方法是在对象创建之前被调用的,它的主要作是创建并返回一个例对象。它是一个类方法,第一个参数是类本身(cls),之后的参数用于传递给__init__方法。在实例化一个对象时,Python首先调用__new__方法来创建对象,然后再调用__init__方法来初始化对象。在__new__方法内部,可以通过调用父类的__new__方法来创建对象,或者直接返回一个已经存在的实例对象。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [python中__new__和__init__的区别](https://blog.csdn.net/weixin_40734030/article/details/122863308)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
相关推荐
![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)