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

  • 相关阅读:
    windows下的SASS/Compass的安装与卸载
    玩转HTML5移动页面(优化篇)
    小谈数组去重
    前端问题解答
    JavaScript使用封装
    JavaScript使用接口
    JavaScript精要(系列)
    JavaScript DOM节点和文档类型
    JavaScript数组类型
    JavaScript函数表达式
  • 原文地址:https://www.cnblogs.com/longyi2020/p/14448792.html
Copyright © 2011-2022 走看看