让我们创建和删除一个对象 –
class Demo:
def __init__(self):
print(“We are creating an object.”);
# destructor
def __del__(self):
print(“We are deleting an object.”);
# Createing and deleting an object
ob = Demo();
del ob;
登录后复制
We are creating an object.
We are deleting an object.
登录后复制
但是,如果一个类定义了 __del__ 但在删除对象时没有调用,原因可能有很多 –
del 语句不一定调用 __del__() – 它只是减少对象的引用计数,如果达到零,则调用 __del__()。
__del__() 方法可以随机调用。 – 如果您的数据结构包含循环链接,则引用计数将永远不会回到零。 Python 运行一种算法来检测此类循环,但垃圾收集器可能会在对数据结构的最后一个引用消失后的某个时间运行。
以下是修复 –
不要直接调用 __del__() – _del__() 应调用 close(),并且 close() 应确保可以对同一对象多次调用它。
避免循环引用 – 使用weakref模块来避免循环引用。它允许您指向对象而不增加其引用计数。 Weakref 模块还可以用于获取类的实例
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
添加我为好友,拉您入交流群!
请使用微信扫一扫!