如何正确清理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