MST

星途 面试题库

面试题:Python类魔法方法的方法调用顺序

假设有一个类继承体系,包含多个类,每个类都重写了__init__、__enter__和__exit__魔法方法。当创建这个继承体系中某个类的实例,并使用with语句时,请详细说明这些魔法方法的调用顺序,并解释原因。
42.9万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

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