zoukankan      html  css  js  c++  java
  • python类中的__init__和__new__方法

    Python中类:

      Python中在创建类的过程中最先调用的不是__init__方法而是__new__方法,__new__方法是一个静态方法,在创建一个类对象时其实是通过__new__方法首先创建出一个类实例,然后通过__init__方法初始化这个实例对象。

    class Dog(object):
        def __init__(self):
            print("----init方法-----")
    
        def __del__(self):
            print("----del方法-----")
    
        def __str__(self):
            print("----str方法-----")
            return "对象的描述信息"
    
        def __new__(cls):#cls此时是Dog指向的那个类对象
    
            #print(id(cls))
    
            print("----new方法-----")
            return object.__new__(cls)
    
    
    #print(id(Dog))
    
    xtq = Dog()
    
    ---------------------

    上例中代码执行结果是:

                   ----new方法-----
                   ----init方法-----
                   ----del方法-----

    由此可以看出当实例化一个类对象时最先调用的就是__new__方法。

    __new__方法至少要有一个参数cls,代表要实例化的类,此参数在实例化时由python解释器自动提供。

    __new__方法必须要有返回值,返回实例化出来的实例,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例。

    __init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其他的初始化的动作,__init__不需要返回值。

    class Dog(object):
        def __init__(self,name):
            self.name = abs(name)
            print("----init方法-----")
            print(self.name)
    
        def __del__(self):
            print("----del方法-----")
    
        def __str__(self):
            print("----str方法-----")
            return "对象的描述信息"
    
        def __new__(cls,name):#cls此时是Dog指向的那个类对象
    
            #print(id(cls))
    
            print("----new方法-----")
            return object.__new__(cls)
    
    
    #print(id(Dog))
    
    xtq = Dog(15.00)

    修改后给类对象添加参数如果类带参数__new__和__init__中也要带上参数。

  • 相关阅读:
    pandas 数据预处理实例演示
    pandas 包的基本使用
    Numpy 包的基础结构(下)
    Numpy 包的基础结构(上)
    Anaconda的基本使用
    黄金点游戏结果
    个人作业-Week2:案例分析
    结对项目-地铁出行路线规划程序(续)
    关于结对和团队组建
    关于个人博客和Github地址提交
  • 原文地址:https://www.cnblogs.com/s-1314-521/p/9762852.html
Copyright © 2011-2022 走看看