返回顶部
首页 > 资讯 > 后端开发 > 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://lsjlt.com/news/325380.html(转载时请注明来源链接)

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

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

  • 微信公众号

  • 商务合作