每天至少打卡一道python面试题。以尽量多的方式解锁题目,如果有遗漏的方法,欢迎在评论区补充。希望大家一起提高!
首先从字面意思理解,new是表示新建对象,init表示初始化对象。
我们来通过下面一段代码来了解__new__和__init__的区别
class Demo(object):
def __new__(cls):
print('This is __new__')
return super().__new__(cls)
def __init__(self):
print('This is __init__')
if __name__ == '__main__':
Demo()
# This is __new__
# This is __init__
从打印结果,可看出创建一个类实例的时候,先执行__new__,再执行__init__。
上面这段代码的执行逻辑:
- 调用Demo()时,先调用__new__,创建并返回一个新对象
- 再执行__init__,进行初始化自身的一些操作,比如添加属性,__init__里的self其实就是__new__返回的实例对象
所以__new__和self的主要区别就是:
- __new__ 通常用于控制一个新实例生成的过程。是类级别的方法。
- __init__ 通常用于初始化一个新实例,控制这个实例初始化的过程,比如添加属性、参数处理或其他操作等,发生在类实例被创建(__new__)之后