python的那些犄角旮旯的事情(三)

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

标签:犄角   可能会   赋值   旮旯   中将   变量   函数   平时   对象   事情   文件   程序   资源

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top