__enter__和__exit__ 在通过类()对类实例化时,触发类的__enter__方法,操作错误或完毕触发__exit__方法 描述符:在一个类中,定义一个类属性为另一个类的实例,如下在B类中定义类属性x值为A的实例,则A类为描述符。 描述符中可定义__get__方法,获取值时触发,__set__方法,设置值时触发,__delete__删...
2.在需要管理一些资源比如文件,网络连接和锁的编程环境中,可以在__exit__中定制自动释放资源的机制,你无须再去关系这个问题,这将大有用处 # __enter__和__exit__ class Foo: def __enter__(self): #with 拿到一个对象,触发enter方法 print('enter') return 11111 def __exit__(self, exc_type, exc...
图一,是《Fluent Python》一书对于with语句的解释,上面写的很清楚,with语句就是实现了上下文管理协议:with语句在开始运行时,会先调用上下文管理器对象的__enter__方法;在with语句运行结束时,不管with语句在运行过程中发生了什么异常,都保证会调用上下文管理器的__exit__方法。
# __enter__和__exit__ class Foo: def __enter__(self): #with 拿到一个对象,触发enter方法 print('enter') return 11111 def __exit__(self, exc_type, exc_val, exc_tb): #文件打开执行完毕后,执行exit方法 print('exit') print('exc_type',exc_type) #异常的类型 print('exc_val',exc_...