如何正确清理Python对象?

将全局变量设置为“无”会清除全局变量。会议结束时,当地人会自我毁灭。Python调用的函数__del__将全局变量设置为None。

考虑下面的代码,其中清理了给定类中的所有对象-

示例

class Counter:

    Count = 0   # This is the count of objects of this class

    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__,在调用__del__时,Counter和/或Count可能已经被GC处理(对象的收集顺序不确定)。该异常表示已经收集了Counter。您不能用__del__做任何特别的事情。

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

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

  • 使用弱引用。

以上是 如何正确清理Python对象? 的全部内容, 来源链接: utcz.com/z/326718.html

回到顶部