欢迎来到测试Test-Admin的博客

本来以为,学习了这么多年,我已经洞察了世界,真相却不过是蒙蔽了自己。原来世界如此精彩,而我却一无所知。昨天已经成为过去,明天还是一个未知,但今天是一个礼物。珍惜自己,把握每一寸光阴!

Python中的__init__()、__new__()、__del__()方法

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

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的时候,变量就会被垃圾回收器自动回收,此时将调用析构函数。

 

posted on 2021-11-14 21:42  Test-Admin  阅读(137)  评论(0编辑  收藏  举报

导航