python笔记-- “__del__”析构方法

news2024/11/14 14:27:05

-#### 1、基本概念(构造函数与析构函数)
特殊函数:由系统自动执行,在程序中不可显式地调用他们
构造函数: 建立对象时对对象的数据成员进行初始化(对象初始化)
析构函数: 对象生命期结束时回收的对象(回收/撤销对象)

2、__del__析构方法的作用

**使用场景:**一般定义在类内,被称为析构方法
作用: 销毁类的实例的时候调用,以释放占用的资源,其中可以放一些清理资源的代码,又如释放连接等
举例:

import  time
class Person:
    def __init__(self,name,age=18):
        self.name = name
        self._age = age

    def __del__(self):
        print('del析构方法进行对象销毁的清理工作')

def atest():
    tom = Person('tom')
atest()

运行结果:
在这里插入图片描述
以上结果可以看出,在类调用结束后,进行销毁时会自动调用__del__

2、与del方法的区别

我们先看个例子:

class Person:
    def __init__(self,name,age=18):
        self.name = name
        self._age = age

    def pa_a(self):
        print(f"姓名:{self.name}")

    # def __del__(self):
    #     print('del析构方法进行对象销毁的清理工作')


def atest():
    tom = Person('tom')
    del tom  
    tom2 = tom
    print(tom2.pa_a())

atest()

运行结果:
在这里插入图片描述
从以上运行结果可以看出,del tom执行后,相当于tom在内存中的引用被删除了,再将tom2指向tom的内存地址,是无法找到引用的,也就会报错。可以看出del是会删除引用计数的

再让我们来看看__del__:

import  time
class Person:
    def __init__(self,name,age=18):
        self.name = name
        self._age = age

    def __del__(self):
        print('del析构方法进行对象销毁的清理工作')



def atest():
    tom = Person('tom')
    tom.__del__()
    tom.__del__()
    tom.__del__()
    tom.__del__()
    print('==========start========')
    tom2 = tom
    tom3 = tom2
    print('=======del1')
    del tom
    time.sleep(3)
    print('======del2')
    del tom2
    print('==========del3')
    del tom3
    time.sleep(3)
    print('========end')

atest()

运行结果:
在这里插入图片描述
结论:
del: 会删除内存中的引用计数
_del_不会删除引用计数,只是在对象销毁的时候自动调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/341982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【IPD】集成产品开发培训课程「3月4-5日」

课程名称集成产品开发(Integrate Product Development)参加对象企业CEO/总经理、产品总监、研发总监/副总、总工/技术总监、市场总监、制造总监、采购总监、产品经理/研发项目经理、研发管理部/技术管理部经理、流程管理部/质量管理部经理、项目管理及质…

Spring Cloud alibaba之Feign

JAVA项目中如何实现接口调用?HttpclientHttpclient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持Http协议的客户端编程工具包,并且它支持HTTP协议最新版本和建议。HttpClient相比传统JDK自带的URL Connection&a…

Java对象内存布局及对象头详解

对象在堆内存中布局 平常我们都在使用对象,现在从底层角度来分析下java对象的内存布局,以及对象布局各部分含义。 周志明老师JVM第三版的定义: 在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头&#xff…

积跬步至千里 || 利用 os.walk 函数读取不同文件夹里的数据

利用 os.walk 函数读取不同文件夹里的数据 在很多情况下,我们需要读取某个文件夹中不同子文件夹里的各种数据文件. 此时, 我们可以利用 os.walk() 进行迭代执行. os.walk() 返回一个迭代器, 包括根目录(roots)、子目录(dirs)和文件(files)三个内容: roots 就是所有文件夹名作…

2023 最新版网络安全保姆级指南,从0到1,建议收藏!

一、网络安全学习的误区 1.不要试图以编程为基础去学习网络安全 不要以编程为基础再开始学习网络安全,一般来说,学习编程不但学习周期长,且过渡到网络安全用到编程的用到的编程的关键点不多。一般人如果想要把编程学好再开始学习网络安全往…

迪赛智慧数——柱状图(正负条形图):20212022人才求职最关注的因素

效果图从近两年职场跳槽方向看,相比此前人们对高薪大厂趋之若鹜,如今职场人更关注业务前景。根据相关数据显示,职场人求职最关注的因素中,“薪资福利”权重下降,“个人发展”权重上升,“业务前景”首次进入…

iPhone怎么找回被误删除的短信?三种方法教给你

iPhone怎么找回被误删除的短信?要知道,在苹果手机里,短信不像照片一样拥有“最近删除”的回收站,换句话说,删除短信后,你若是后悔了,就不能通过“最近删除”进行找回。不过别着急,请…

LeetCode-110. 平衡二叉树

目录题目分析递归法题外话题目来源 110. 平衡二叉树 题目分析 平很二叉树:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 二叉树节点的深度和二叉树节点的高度 递归法 递归三步曲 1.明确递归函数的参数和返回值 参数:当前传入节点。 返回值…

【C++设计模式】学习笔记(5):Decorator 装饰模式

目录 简介动机(Motivation)模式定义结构(Structure)要点总结笔记结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金…

2023年1月语音合成(TTS)和语音识别(ASR)论文月报

论文统计每月更新一次,主要跟踪语音合成和语音识别的发展状况(很多文章都是在会议后才发出,但不影响统计。统计过程难免存在疏漏,因此统计结果仅供参考。所有文章语音合成领域统计列表请访问http://yqli.tech/page/tts_paper.html&#xff0c…

肝一波,体验人工智能对话

一、肝一波,体验真爽 废话不多少,小码哥直接提大家感兴趣的问题,截图分享给大家。 问题一:如何在一年内赚到100万元 答: 一、赚钱的方式 开公司:在一年内开拓新业务模式,寻求投资&#xff…

Vue学习笔记3

Vue学习笔记31.1 指针1.2 指令补充&nextTick2.1 Vue-cli2.1.1 Vue-cli创建项目2.1.2 启动流程&入口文件2.1.3 eslint修复2.1.4 单文件组件-注册2.1.5 单文件组件-通信2.1.6 单文件组件-生命周期2.1.7单文件组件-指令与过滤器2.1.8 反向代理&别名反向代理需要在vue.…

二叉树进阶--二叉搜索树

目录 1.二叉搜索树 1.1 二叉搜索树概念 1.2 二叉搜索树操作 1.3 二叉搜索树的实现 1.4 二叉搜索树的应用 1.5 二叉搜索树的性能分析 2.二叉树进阶经典题: 1.二叉搜索树 1.1 二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一棵空树,…

144. 二叉树的前序遍历

144. 二叉树的前序遍历 Java代码&#xff1a;递归 public List<Integer> preorderTraversal(TreeNode root) {List<Integer> res new ArrayList<>();preOrder(root, res);return res; } private void preOrder(TreeNode root, List<Integer> res) {i…

【沐风老师】3DMAX几何投影插件Geometry Projection使用详解

【几何投影插件】 描述 3DMAX几何投影插件Geometry Projection&#xff0c;将一个或多个对象或它的顶点选择沿全局或局部 x、y 或 z 轴投影到另一个对象上。 适用版本 3dMax2013或更高版本 安装设置 插件的安装非常简单&#xff0c;解压后把插件脚本 “geometry_projectio…

SmartSoftHelp 数据库优化辅助软件

SmartSoftHelp 数据库高并发优化&#xff0c;数据库连接字符串优化&#xff0c;SQL耗时优化&#xff0c;SQL格式化&#xff0c;美化&#xff1f; 这些问题你都知道&#xff1f; 这不仅仅是一个软件&#xff0c;而是很多种解决方案&#xff01; 支持Netframework ,netcore后台…

移动设备安全管理基础指南

什么是移动安全管理 &#xff08;MSM&#xff09; 移动安全管理是指为保护企业中的移动设备和企业数据而采取的行动。这些操作可以进一步被归类为反应性的或主动的&#xff0c;基于该操作是在数据和设备被破坏之前还是之后执行的。除了管理移动设备外&#xff0c;大多数MDM解决…

验收测试分类

α测试 Alpha 是内测版本&#xff0c;即现在所说的CB。 此版本表示该软件仅仅是一个初步完成品, 通常只在软件开发者内部交流, 也有很少一部分发布给专业测试人员。 一般而言, 该版本软件的bug 较多, 普通用户最好不要安装。 β测试 Beta是公测版本&#xff0c;是对所有用户…

【算法】高精度

作者&#xff1a;指针不指南吗 专栏&#xff1a;算法篇 &#x1f43e;不能只会思路&#xff0c;必须落实到代码上&#x1f43e; 文章目录前言一、高精度加法二、高精度减法三、高精度乘法四、高精度除法前言 ​ 高精度即很大很大的数&#xff0c;超过了 long long 的范围&…

html标签手册

完整的HTML页面&#x1f4d1; ①基础标签&#x1f4d1;&#x1f4d1;&#x1f4d1; HTML <!DOCTYPE> 声明 !DOCTYPE声明必须是 HTML 文档的第一行&#xff0c;位于 html标签之前。 !DOCTYPE 声明不是 HTML 标签&#xff1b;它是指示 web 浏览器关于页面使用哪个 HTML 版…