11.简述面向对象中__new__和__init__区别

每天至少打卡一道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__。

上面这段代码的执行逻辑:

  1. 调用Demo()时,先调用__new__,创建并返回一个新对象
  2. 再执行__init__,进行初始化自身的一些操作,比如添加属性,__init__里的self其实就是__new__返回的实例对象

所以__new__和self的主要区别就是:

  1. __new__ 通常用于控制一个新实例生成的过程。是类级别的方法。
  2. __init__ 通常用于初始化一个新实例,控制这个实例初始化的过程,比如添加属性、参数处理或其他操作等,发生在类实例被创建(__new__)之后

你可能感兴趣的:(11.简述面向对象中__new__和__init__区别)