广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中的对象析构函数del怎么用
  • 262
分享到

Python中的对象析构函数del怎么用

2023-06-29 14:06:29 262人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“python中的对象析构函数del怎么用”,在日常操作中,相信很多人在Python中的对象析构函数del怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中的对象析构函数del

这篇文章主要介绍“python中的对象析构函数del怎么用”,在日常操作中,相信很多人在Python中的对象析构函数del怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中的对象析构函数del怎么用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Python中的对象析构函数del怎么用

前言:

Python 中的类的构造函数 __init__ , 每当实例产生就会调用这个构造函数。

反过来,每当实例对象需要被垃圾收集被收回时,就需要用到析构函数 __del__ 。

__del__ 方法是类的一种特殊方法。可以利用 __del__ 方法来清理资源,例如关闭文件。

来看一个例子:

class Life:    def __init__(self, name='None'):        print('Hello,' + name)        self.name = name    def live(self):        print(self.name)        def __del__(self):        print("Goodbye," + self.name)def main():    bob = Life('Bob')    bob.live()if __name__ == '__main__':    main()

运行该代码,输出结果为:

Hello,Bob
Bob
Goodbye,Bob

我们得到上面的输出是因为当代码即将结束时,不再需要类 Life,因此它已准备好被销毁。 在类 Life 被销毁之前,会自动调用 __del__ 方法。

还可以通过调用 del 手动调用 __del__ 方法:

class Life:    def __init__(self, name='None'):        print('Hello,' + name)        self.name = name    def live(self):        print(self.name)        def __del__(self):        print("Goodbye," + self.name)def main():    bob = Life('Bob')    del bobif __name__ == '__main__':    main()

执行结果:

Hello,Bob
Goodbye,Bob

值得注意的是:del x 并不直接调用 x.__del__() ,前者将 x 的引用计数减一,而后者仅在其引用计数达到零时才被调用。

在 Python 中,任何未使用的对象(如内置类型或类的实例)在不再使用时会自动从内存中删除(移除)。 这种释放和回收未使用内存空间的过程称为垃圾回收。

在Python中何时使用__del__?

重要的是要注意,当对象处于销毁的过程中,调用 __del__ 方法(未损坏后),因此仍然可以在__del__方法中访问属性。

由于__del__ 可以访问对象的数据成员,因此应该确保对象的填充删除,以便没有内存泄露。

class App:    def __init__(self):        print("Open App")    def __del__(self):        print("Closed App")class Phone:    app = None    def __init__(self):        print("Switching on the Phone")        self.__class__.app = App()    def __del__(self):        del self.__class__.app        print("Switching off the Phone")phone = Phone()del phone

执行结果:

Switching on the Phone
Open App
Closed App
Switching off the Phone

在这个例子中,如果我们没有在__del__ 方法中销毁手机的属性 app,它就会留在内存中,导致内存泄漏。

析构函数使用紧要

Python 中的析构函数并不像 c++ 中那样被频繁使用,因为它存在一些众所周知的警告和极少数鲜为人知的暗坑。

尽量减少使用 __del__ 函数:

  • 第一,因为 Python 在回收实例时,会自动回收该实例拥有的所有内存空间,所以析构函数并不需要考虑空间管理。所以也就失去了手动写 __del__ 的意义。

  • 第二,无法预测一个实例什么时候会被回收。有时候你想触发析构函数时,系统表中对对象的引用会阻止析构函数的执行。Python 也无法保证解释器退出时,一个仍然存在的对象会调用其析构函数。

  • 第三,__del__ 可能会引发的异常会直接向 sys.stderr(标准错误流) 打印一条警告消息,而不是触发一个异常事件。因为它通过垃圾收集器运行在不可预料的上下文中。

  • 第四,当我们期待垃圾回收时,对象间的循环引用可能会阻止其发生。

到此,关于“Python中的对象析构函数del怎么用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Python中的对象析构函数del怎么用

本文链接: https://www.lsjlt.com/news/325380.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python中的对象析构函数del怎么用
    这篇文章主要介绍“Python中的对象析构函数del怎么用”,在日常操作中,相信很多人在Python中的对象析构函数del怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中的对象析构函数del...
    99+
    2023-06-29
  • Python 中的对象析构函数__del__ 详情
    目录在Python中何时使用__del__?析构函数使用紧要 前言: Python 中的类的构造函数 ​​__init__​​ , 每当实例产生就会调用这个构造函数。 反过来,每当实...
    99+
    2022-11-13
  • python 面向对象之析构函数
    析构函数: 在实例释放、销毁的时候自动执行的,通常用于做一些收尾工作, 如关闭一些数据库连接,关闭打开的临时文件析构函数,是无法传参的class Role(object):     ...
    99+
    2023-01-30
    面向对象 函数 python
  • C++类、对象、构造函数及析构函数怎么定义使用
    这篇文章主要介绍“C++类、对象、构造函数及析构函数怎么定义使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++类、对象、构造函数及析构函数怎么定义使用”文章能帮助大家解决问题。C++类与对象C...
    99+
    2023-07-06
  • C++对象的销毁之析构函数实例分析
    本文小编为大家详细介绍“C++对象的销毁之析构函数实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++对象的销毁之析构函数实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、对象的销毁生活中的对象...
    99+
    2023-06-30
  • JavaScript函数中的arguments对象怎么用
    这篇文章主要讲解了“JavaScript函数中的arguments对象怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript函数中的arg...
    99+
    2022-10-19
  • python中怎么用demjson解析对象
    要使用demjson库解析一个对象,可以按照以下步骤进行操作: 首先,确保已经安装了demjson库。可以使用以下命令安装: p...
    99+
    2023-10-26
    python demjson
  • Python函数对象与闭包怎么使用
    本篇内容介绍了“Python函数对象与闭包怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一 函数对象函数对象指的是函数可以被当做&a...
    99+
    2023-06-30
  • JavaScript对象的构造函数和new操作符怎么用
    本篇内容主要讲解“JavaScript对象的构造函数和new操作符怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript对象的构造函数和new...
    99+
    2022-10-19
  • C++深入讲解对象的销毁之析构函数
    目录一、对象的销毁二、析构函数三、小结一、对象的销毁 生活中的对象都是被初始化后才上市的生活中的对象被销毁前会做一些清理工作—股而言,需要销毁的对象都应该做清理 解决方案...
    99+
    2022-11-13
  • C++中类对象的拷贝构造函数
    本篇内容主要讲解“C++中类对象的拷贝构造函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中类对象的拷贝构造函数”吧!拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一...
    99+
    2023-06-17
  • Python中如何使用函数对象
    本篇文章为大家展示了Python中如何使用函数对象,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python是如何工作的?我们将从高层开始了解python的内部工作。你在你的python REPL里...
    99+
    2023-06-17
  • C++构造函数与析构函数怎么使用
    这篇文章主要讲解了“C++构造函数与析构函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++构造函数与析构函数怎么使用”吧!对象的初始化和清理生活中我们买的电子产品都基本会有出厂...
    99+
    2023-07-02
  • javascript构造函数以及原型对象的示例分析
    小编给大家分享一下javascript构造函数以及原型对象的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!如果是实例方法,不同的实例化,它们引用的地址是不一样的,是唯一的。//定义...
    99+
    2022-10-19
  • C++中如何使用类对象构造函数
    C++中如何使用类对象构造函数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。对于普通类型的对象来说,他们之间的复制是很简单的,自己定义的类的对象同样是对象,谁也...
    99+
    2023-06-17
  • C++函数对象怎么调用
    这篇文章主要介绍了C++函数对象怎么调用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++函数对象怎么调用文章都会有所收获,下面我们一起来看看吧。一、客户需求编写一个函数函数可以获得斐波那契数列每项的值每调用...
    99+
    2023-06-30
  • C++11的函数对象怎么使用
    这篇文章主要介绍“C++11的函数对象怎么使用”,在日常操作中,相信很多人在C++11的函数对象怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++11的函数对象怎么使用”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-19
  • C++析构函数怎么使用
    这篇文章主要介绍了C++析构函数怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++析构函数怎么使用文章都会有所收获,下面我们一起来看看吧。特性析构函数是特殊的成员函数特征如下:析构函数名是~类名;无参...
    99+
    2023-06-30
  • C++分析类的对象作类成员调用构造与析构函数及静态成员
    目录类对象作为成员静态成员定义和分类静态成员变量静态成员函数总结类对象作为成员 C++类中的成员可以是另一个类的对象,我们称该成员为 对象成员 例如: class Phone {} ...
    99+
    2022-11-13
  • python析构函数的使用方法
    这篇文章将为大家详细讲解有关python析构函数的使用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作