Python-__init__ 和 __new__区别和原理

Posted 北门吹雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python-__init__ 和 __new__区别和原理相关的知识,希望对你有一定的参考价值。

__init__ 和 __new__区别

  1. 从传递参数角度看,__init__第一个参数是实例本身, __new__传递的是类本身

  2. 从执行顺序角度看,__new__方法执行在 __init__方法之前

  3. 从功能角度看, __new__是控制对象实例过程,在对象生成之前就执行完毕, __init__是用来完成对象的实例化,在对象生成之后给对象初始化参数

  4. 从差异性角度看, __new__不返回 super().__new__(cls),则不会执行 __init__方法,也就是通过父类中的__new__启动 __init__函数实例化也就是object类

from random import randint


class BeiMenChuiXue:
    def __new__(cls, *args, **kwargs):
        # 启动实例化
        print("__new__")
        r = super().__new__(cls)
        # 自定义初始化函数
        r.beimenchuixue(*args, **kwargs)
        return r

    def beimenchuixue(self, numbers, name):
        print("__init__")
        self.numbers = numbers
        self.name = name


if __name__ == ‘__main__‘:
    numbers = [randint(-10, 10) for _ in range(20)]
    bei_men_chui_xue = BeiMenChuiXue(numbers, "北门吹雪")
    print(bei_men_chui_xue.numbers)

  

以上是关于Python-__init__ 和 __new__区别和原理的主要内容,如果未能解决你的问题,请参考以下文章

深入理解Python中的 __new__ 和 __init__

Python-__init__ 和 __new__区别和原理

python __init__() 和__new__()简析

Python中的__init__和__new__介绍

Python类中的__new__和__init__的区别

Python中的__init__和__new__