当前位置: 首页 > 图灵资讯 > 行业资讯> 一文读懂Python中__new__和__init__的区别与联系

一文读懂Python中__new__和__init__的区别与联系

发布时间:2025-09-24 11:03:14

__new__ 和 __init__ 主要表现为:

它本身的区别;

Python中新旧类的定义。

__new__ 创建负责对象,而 __init__ 负责人的初始化。

__new__:在创建对象时,调用将返回当前对象的一个例子

__init__:创建对象后,对当前对象的一些实例进行初始化,没有返回值

1. 在类中,如果___new__和__init__同时存在,将优先调用__new__

classClsTest(object):
def__init__(self):
print("init")
def__new__(cls,*args,**kwargs):
print("new")

ClsTest()

输出

new

2. 如果__new__回到一个对象的例子,会隐式调用__init__

代码实例:

classClsTest(object):
def__init__(self):
print("init")
def__new__(cls,*args,**kwargs):
print("new%s"%cls)
returnobject.__new__(cls,*args,**kwargs)

ClsTest()

输出

new<class'__main__.ClsTest'>
init

3. __new__方法将返回构造对象,__init____不会。____init__无返回值。

classClsTest(object):
def__init__(cls):
cls.x=2
print("init")
returncls

ClsTest()

输出

init
Traceback(mostrecentcalllast):
File"<stdin>",line1,in<module>
TypeError:__init__()shouldreturnNone,not'ClsTest'

4. 若__new______________________init___不会被调用,即使是父类的例子也不行

ClsTest11Class(object):
pass

clasclstest2(clstest1):
def__init__(self):
print("init")
def__new__(cls,*args,**kwargs):
print("new%s"%cls)
returnobject.__new__(Clstest1,*args,**kwargs)

b=Clstest2()
print(type(b))

输出

new<class'__main__.Test2Cls#39;>
<class'__main__.clstest1'>

总结

1. 只有继承object的新类才有__new__

2. __new_________________________new___必须有返回值,返回实例化的例子可以是return父类__new__出来的例子,或者直接是object__new__出来的例子

3. __init__有一个参数self,就是这个__new___回来的例子,___init__在__new_________________init__不需要返回值

4. 如果__new__回到一个对象的例子,会隐式调用__init__。

相关文章

Python中reduce函数和lambda表达式的学习

Python中reduce函数和lambda表达式的学习

2025-09-25
Python小白必学的面向对象

Python小白必学的面向对象

2025-09-25
一个例子解释python装饰器

一个例子解释python装饰器

2025-09-25
深入理解Python的set和dict

深入理解Python的set和dict

2025-09-25
Python中正则表达式的巧妙使用

Python中正则表达式的巧妙使用

2025-09-25
5分钟搞定Python中函数的参数

5分钟搞定Python中函数的参数

2025-09-25