1、先实例化,执行__init__ 2、再执行上下文管理魔术方__enter__ 3、程序退出时执行__exit__
fp=open(r"C:\Users\SharpEl\Desktop\myfile.txt")
try:
for line in fp:
print(line)
finally:
fp.close()
with open(r"C:\Users\SharpEl\Desktop\myfile.txt") as fp:
for line in fp:
print(line)
代码块2没有关闭文件&;没有try/finally块。因为with语句会自动关闭myfile.txt。您甚至可以通过调用print(fp.closed)属性来检查它——该属性返回True。
这是因为open函数返回的文件对象(在我的示例中是fp)有两个内置方法__enter__和__exit__。它也被称为上下文管理器。__enter__方法在带有块的开头调用,而__exit__方法在结尾调用。注意:with语句仅适用于支持上下文更改协议的对象,即它们具有__enter__和__exit__方法。实现这两种方法的类称为上下文管理器类。