Python魔法方法:__del __(self) 方法

Posted youzhouliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python魔法方法:__del __(self) 方法相关的知识,希望对你有一定的参考价值。

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__方法,这样才能保证合理地回收父类实例的部分属性。

以上是关于Python魔法方法:__del __(self) 方法的主要内容,如果未能解决你的问题,请参考以下文章

83.魔法方法__del__()

python魔法方法

Python – 魔法方法

九.魔法方法特性和迭代器

python的魔术方法大全

Python-魔术方法大全