2024-06-26 14:15:39 发布
网友
我想确定如何确定对象是否超出范围,并在对象超出范围时执行一些操作
在java中,我们有一个finalize方法,当一个对象不再有引用时,JVM会调用它。在
我对python世界非常陌生,我想确定是否有类似的方法,比如javafinalize,我们可以在这里执行一些操作,然后销毁对象,或者不再引用对象
您需要的是一个对象的destructor。Python使用类的-__del__方法实现了这个概念。在
destructor
__del__
示例-
class FooType: def __init__(self, id): self.id = id print self.id, 'born' def __del__(self): print self.id, 'died'
当对象即将被销毁时,__del__方法将被调用。在
现在,如果在python文件中定义上述类,将其称为test.py,并在其下面添加以下行并运行python代码,将得到以下结果-
test.py
请注意,__del__析构函数可能并非在所有情况下都被调用,因此建议使用contexts来处理清理等
contexts
虽然处理清理等的更好方法是使用contexts,使用with语句。with语句的一个示例-
with
with open('file','r') as f: <some statements operating on f>
一旦with块结束,解释器将调用变量的__exit__函数,该函数将负责清理。(在上面的例子中,context manager是f)
__exit__
context manager
f
可以使用^{}创建自定义上下文管理器。在
您需要的是一个对象的
destructor
。Python使用类的-__del__
方法实现了这个概念。在示例-
当对象即将被销毁时,
__del__
方法将被调用。在现在,如果在python文件中定义上述类,将其称为
^{pr2}$test.py
,并在其下面添加以下行并运行python代码,将得到以下结果-请注意,
__del__
析构函数可能并非在所有情况下都被调用,因此建议使用contexts
来处理清理等虽然处理清理等的更好方法是使用
contexts
,使用with
语句。with
语句的一个示例-一旦
with
块结束,解释器将调用变量的__exit__
函数,该函数将负责清理。(在上面的例子中,context manager
是f
)可以使用^{} 创建自定义上下文管理器。在
相关问题 更多 >
编程相关推荐