面试题答案
一键面试- 调用顺序:
- 首先调用
__init__
方法。 - 接着调用
__enter__
方法。 - 当
with
代码块执行完毕(无论正常结束还是发生异常),调用__exit__
方法。
- 首先调用
- 原因:
__init__
方法:它是类的构造函数,用于在创建对象时进行初始化操作,在对象创建的那一刻就会被调用,为对象的属性等进行赋值等初始化工作,因此是最先被调用的。__enter__
方法:with
语句的主要目的是在进入代码块时获取一个上下文管理器对象,__enter__
方法在进入with
代码块时被调用,它可以返回一个值,这个值可以赋值给as
关键字后的变量(如果有as
的话),用于代码块中的操作。__exit__
方法:当with
代码块执行结束,无论是正常结束还是因为异常而结束,都会调用__exit__
方法。它用于清理资源,比如关闭文件、释放锁等操作。如果代码块中发生异常,__exit__
方法的参数会包含异常类型、异常值和追溯信息,以便进行相应的异常处理。