将全局变量设置为“无”会清除全局变量。会议结束时,当地人会自我毁灭。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()
用于文件对象。
使用弱引用。