zoukankan      html  css  js  c++  java
  • Python中的__init__()、__new__()、__del__()方法 Test

      在类中,可以定义属性,也可以定义函数方法,其中有两个比较特殊的函数:构造函数、析构函数。

    1、__init__()方法

      __init__()方法是类实例化对象以后,对对象进行初始化的操作,也就是当通过类实例化对象以后,就会执行该函数,这样就可以把初始化的属性放在__init__(参数)方法中。

    示例:

    class Person:
        def __init__(self,name='',age='',height=''):
            # 声明一个对象属性姓名neme,初始值为空字符串
            self.name = name
            # 声明一个对象属性年龄age,初始值为空字符串
            self.age = age
            # 声明一个对象属性高度height,初始值为175cm,类型为字符串
            self.height = '175cm'
    
    # 通过类实例化对象的时候,要通过给类名后面的括号里传参,保证__init__()方法里面的每一个参数都有值
    p1 = Person('张三','17')
    p2 = Person('王五','19')
    # 通过“对象.方法”访问对象属性
    print(p1.name)
    print(p1.height)
    print(p2.age)
    print(p2.height)
    
    结果:
    张三
    175cm
    19
    175cm
    温馨提示:
    1、__init__()方法是在类创建对象后,自动调用的方法。
    2、__init__()方法的作用是创建对象后,初始化对象的属性。
    3、对象的属性被声明在__init__()方法中。

    2、__new__()方法

      __new__(参数)方法在构建实例对象之前就会被调用,至少被接收一个参数cls,cls代表要实例化的类,此参数在实例化时由Python解释器提供。__new__()方法必须有一个返回值,该值为实例化对象。

    实例化类对象一般分为两种:

    步骤一:

    执行__new__()方法,该方法是在实例对象被创建之前调用,用于创建实例对象,然后返回实例对象。

    步骤二:

    执行__init__()方法,该方法是在实例对象被创建之后调用,用于设置对象属性的一些初始值。

      也就是说,__new__()方法在__init__()方法之前被调用,__new__()方法返回的值将传递给__init__()方法,然后__init__()方法再给这个实例的属性字段赋初始值。

    示例:

    class NewClass:
        def __init__(self):
            print("这是一个init方法")
        def __new__(cls, *args, **kwargs):
            print("这是一个new方法")
            return super().__new__(cls)
    
    结果:
    这是一个new方法
    这是一个init方法
    温馨提示:
    __new__()方法返回的实例化对象,可以是直接返回父类__new__()方法的实例。在__init__()方法中,有一个参数为self,这个self其实就是__new__()方法返回的实例。__init__()方法其实就是对__new__()方法返回对象进行初始化,因此__init__()方法并不需要返回值。

    3、__del__()方法

      在实例化类对象时,一定会调用初始化函数__init__()来初始化对象的属性,那么在销毁对象时,也一定会调用到析构函数__del__()来销毁对象。

    示例:

    class Student:
        # 构造函数创建对象后,在初始化对象的属性时调用
        def __init__(self,name = '',number = ''):
            self.name = name
            self.number = number
            print('调用构造')
        # 析构函数被Python的垃圾回收器销毁的时候调用
        def __del__(self):
            print('调用析构')
    
    if __name__ == '__main__':
        sut = Student('作者','18')
        del sut
    
    结果:
    调用构造
    调用析构
    温馨提示:
    当对象被创建并赋值给变量的时候,该对象的引用计数被设置为1,那么减少引用计数就是显式调用del变量名。当变量的引用计数为0的时候,变量就会被垃圾回收器自动回收,此时将调用析构函数。
  • 相关阅读:
    当blogger遭遇bXbm42e8
    按时间顺序来,对我影响较大的格言应当首推在高中毕业时霄美人送我的那一句话,它指引着我如何去面对很多难...
    遇见一孙子
    回草儿:呵呵~~这个……随缘。
    学Linux下的编程,make非学好不可啊……
    呵呵,你的口才不错啊!军师,我发现你挺会说话。
    字符串处理的一个简单题
    以Python为基础的REST(JSON为交换数据)接口的测试框架设计(一)
    人生的战略总结最近三年选择的得失
    淘宝开放API初探
  • 原文地址:https://www.cnblogs.com/renshengruxi/p/15553512.html
Copyright © 2011-2022 走看看