Case5
class Case5:
def __del__(self):
print(f"{self.__class__.__name__}.__del__")
raise ValueError
if __name__ == '__main__':
x = Case5()
del x
print("11111111")
运行结果:
在__del__函数中抛出异常后,其实后面的代码也能正常的执行。
Case6
global_x = None
class Case6:
def __del__(self):
global global_x
print(f"{self.__class__.__name__}.__del__")
global_x = self
if __name__ == '__main__':
x = Case6()
print(x)
del x
print(global_x)
print("11111111")
运行结果:
在__del__函数中将对象赋值给一个全局变量,你可能会认为程序结束后,在释放全局变量的时候还会再调用一次__del__,但实际运行结果确实没有再调用了。你也可以试试,用global_x其实还可以访问该类中的其他成员函数和变量的。那为什么在程序结束后,不会再调用__del__函数了?有知道的小伙伴可以聊一下。
Case7
class Case7:
def __enter__(self):
print("call __enter__")
return "return __enter__"
def __exit__(self, exc_type, exc_val, exc_tb):
print("call __exit__")
if __name__ == '__main__':
with Case7() as f:
print(f)
运行结果:
平时我们是用with来创建对象,或者打开一个文件,为什么它能保证对象或文件的释放,因为其内部也会调用相关接口。当申请资源的时候,调用__enter__,当释放资源的时候,调用__exit__。
页面更新:2024-03-27
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号