zoukankan      html  css  js  c++  java
  • __new__与__init__区别

    '''
    __new__ AND __init__
    构造方法=创建对象+初始化对象=__new__+__init__

    __new__方法是在实例创建之前被调用,是一个静态方法,主要的功能就是创建一个类的实例并返回

    __init__方法是在实例创建之后被调用,主要的功能是设置实例的一些属性初始值

    运行过程:__new__在__init__之前被调用,__new__的返回值(实例)将传递给__init__方法的第一个参数(self),然后__init__给这个实例(self)设置一些参数

    '''

    class Test():
    
        def __init__(self):#第8步
            print("..init...开始了")
            print(self)#第9步
            self.a="hao"#第10步
            print("这是init方法执行完了") #第11步
        def __new__(cls): #第2步
            print("new开始了")
            print(id(cls))#第3步
            print("这是new方法")#第4步
            ret=object.__new__(cls)
            print(ret)#第5步
            print("new执行完了")
            return ret #第6步
    print(id(Test))  #第一步
    print("...")
    test=Test()#第7步
    print("====")
    print(id(test))#第12步

    ==new
    2178735992600
    ...
    new开始了
    2178735992600
    这是new方法
    <__main__.Test object at 0x000001FB4032EF88>
    new执行完了
    ..init...开始了
    <__main__.Test object at 0x000001FB4032EF88>
    这是init方法执行完了
    ====
    2178625499016

    相当于做了三件事:

    1. 调用new来创建对象,找了一个变量ret接受new的返回值,这个值表示创建对象的引用
    2. init(刚刚创建出来的对象的引用),设置一些初始值
    3. 返回对象的引用

    参考:https://blog.csdn.net/weixin_40539952/article/details/103887647

  • 相关阅读:
    人工智能,垂直领域
    西方企业该向中国式创新学什么?
    [Leetcode 6] ZigZag问题的一种新思路
    Unknown column &#39;*&#39; in &#39;field list&#39; 异常解决
    多媒体——图像文件大小的计算
    Lucky Number
    win7 64位系统下进入debug
    Chromium网页DOM Tree创建过程分析
    做好长期奋斗的准备
    IP寻址和子网运算
  • 原文地址:https://www.cnblogs.com/longyi2020/p/14448792.html
Copyright © 2011-2022 走看看