Python 如何正确清理对象

如何正确清理Python对象?

通过将全局变量设置为None来清理全局。本地变量在会话结束时自动销毁。Python调用的del函数将全局变量设置为None。

考虑以下代码,其中清理给定类中所有对象:

更多Python相关文章,请阅读:Python 教程

示例

class Counter:
    Count = 0 # 这是这个类的对象计数
    def __init__(self, name):
        self.name = name
        print name,'created'
        Counter.Count += 1
    def __del__(self):
        print self.name,'deleted'
        Counter.Count -= 1
        if Counter.Count == 0:
            print 'Last Counter object deleted'
        else:
            print Counter.Count,'Counter objects remaining'
x = Counter("First")
del x

没有最后一个del,会导致异常。

关于__del__的Python文档提醒:

警告:由于__del__()方法调用的不稳定情况,执行期间发生的异常会被忽略,并打印一条消息到sys.stderr中。同时,当在响应删除模块时调用__del__()(例如,在程序执行完成时),__del__()方法引用的其他全局变量可能已被删除。因此,__del__()方法应该尽可能少地进行维护外部不变量。

如果没有显式调用del,则__del__仅在程序的末尾被调用,Counter和/或Count可能已经被GC回收,__del__被调用的时候(对象被收集的顺序是非确定性的)。异常意味着Counter已被回收。你不能用__del__做任何特别复杂的事情。

这里有两种可能的解决方案。

  • 使用显式终结器方法,例如文件对象的close()。

  • 使用弱引用。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程