zoukankan      html  css  js  c++  java
  • python __init__() 和__new__()简析

    先看下面一个例子:

    如上图,例1中,构造了函数Foo,并重写了__new__()和__init__()方法,在实例化Foo()的时候,却只调用了__new__()

    例2中,在实例化Too()对象时,同时调用了__new__()和__init__()方法。

    实例化对象的本质都是三个过程:创建实例对象,初始化实例对象和返回实例化对象

    上面函数的__new__()方式,实际上就是在创建实例化对象,它有一个必传的参数,cls:cls是当前正在实例化的类。

    而__init__()则是在初始化实例对象。

    在开始实例化对象时,程序会调用__new__()方法返回cls(当前类的实例),程序在接收到__new__()返回的实例后,调用__init__()方法初始化实例对象。注意,__new__()如果没有当前类的实例,那么__init__()方法不会被调用(如上图1)。

    这里__new__()返回的实例cls将作为参数传递给__init__()方法,即self。

    __new__()方法中,cls可以是当前实例化对象,也可以是其他类的实例,如果是其他类的实例,那么只会调用被返回的那个类的构建方法。

  • 相关阅读:
    docker gitlab and gitlab api
    service mesh,linkerd,sidecar,apigateway
    FIS3
    various system release [online]
    certification on windows and
    postman_
    macbook ios recovery and mount hfs+ journal and revert
    distribution system index
    登录科普(一)CAS与Oauth
    sonar,jiar,xray,jenkins[cli] [sudoers]
  • 原文地址:https://www.cnblogs.com/fiona-zhong/p/9916936.html
Copyright © 2011-2022 走看看