Python魔法方法(3):__del __(self) 方法
  TEZNKK3IfmPf 2023年11月14日 37 0

Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,它们是面向对象的 Python 的一切。它们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了某一个魔法方法,那么这个方法就会在特殊的情况下自动被 Python 所调用。

功能

析构器,定义对象在内存中被释放时的行为。

参数

self 代表对象本身,也可以有其他参数。

应用场景

Python自带垃圾回收机制,但它只能回收用户级资源,而不能自动回收系统资源。故当一个对象同时拥有用户级(Python程序)与内核级(系统)两种资源时,就必须在清除对象的同时回收系统资源(如关闭文件等),这就用到了__del__方法。

__del__方法是当对象被系统回收的时候调用的魔法方法,在对象生命周期调用结束时调用该方法。

Python 采用自动引用计数(ARC)方式来回收对象所占用的空间,当程序中有一个变量引用该 Python 对象时,Python 会自动保证该对象引用计数为 1;当程序中有两个变量引用该 Python 对象时,Python 会自动保证该对象引用计数为 2,依此类推,如果一个对象的引用计数变成了 0,则说明程序中不再有变量引用该对象,表明程序不再需要该对象,因此 Python 就会回收该对象。所以大部分时候,都不需要我们手动去删掉不再使用的对象,python的回收机制会自动帮我们做这件事。

示例代码:

class A(object):
    def __init__(self, a):
        print('this is A init')
        self.a = a

    def __del__(self):
        print('this is magic method del')


m = A(1)

运行结果:

this is A init
this is magic method del
class MyText(object):
    def __init__(self, file_name):
        self.file_name = file_name

    def __del__(self):
        self.file_name.close()
        del self.file_name
        print('我被回收了哦')


sample = MyText(open('b.txt', 'a'))
print('1234', file=sample.file_name)
sample1 = sample
del sample

print('----------')



执行结果:

----------
我被回收了哦

1、并不是对一个变量执行 del 操作,该变量所引用的对象就会被回收,只有当对象的引用计数变成 0 时,该对象才会被回收。
   2、如果父类提供了 __del__方法,则子类重写 __del__方法时必须显式调用父类的 __del__方法,这样才能保证合理地回收父类实例的部分属性。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   32   0   0 python开发语言
  TEZNKK3IfmPf   2024年05月31日   25   0   0 python
  TEZNKK3IfmPf   2024年05月31日   34   0   0 excelpython
  TEZNKK3IfmPf   2024年05月31日   25   0   0 python
TEZNKK3IfmPf