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

  • 相关阅读:
    浏览器兼容性优化
    js操作table(增加行,删除行,上移,下移,复制行)
    褚时健传读后感
    新鞋
    八达岭奥莱
    springMVC 多方法controller
    springMVC入门配置及helloworld实例
    springMVC源码下载地址
    spring3mvc与struts2比较
    hql语句拼接的替换方式
  • 原文地址:https://www.cnblogs.com/longyi2020/p/14448792.html
Copyright © 2011-2022 走看看