11、上下文管理器(魔术方法2)

上下文管理器
上下文管理器的服务对象是with语法
with open(‘file’, ‘r’, encoding=‘utf-8’) as f: # 这个f,是所打开文件的句柄
content = f.read()
print(f)
什么是上下文管理器?
1.上下文管理器是一个Python对象,为操作提供了额外的上下文信息。这种额外的信息,在使用with语句初始化上下文,以及完成with代码块中的所有代码时,采用可调用的形式
上下文管理器是由两个魔术方法来组成的
1.object.enter(str)
a.输入与此对象相关的运行时上下文。如果存在的话,with语句将绑定该方法的返回值到该语句的as子句中指定的目标。
b.这个方法是在with语句开始时执行的
2.object.exit(self, exc_type, exc_val, exc_tb)
a.退出与此对象相关的运行时上下文。如果该上下文退出时没有异常,这三个参数都为None。
b.这个方法是在with语句结束时执行的,可不使用try来记录错误日志。
c.参数解释:
exc_type:异常类型
exc_val:异常值
exc_tb:异常回溯追踪
exc_type=> <class ‘NameError’>
exc_val=> name ‘a’ is not defined
exc_tb=> <traceback object at 0x000000000282F188>
在一个类中,只要实现了上面这两个魔术方法,那么这个类就实现了上下文协议,就是一个上下文管理器类
代码例子
class MyOpen(object):
“”“自定义上下文管理器类”""

def __init__(self, file, method, encoding):
    self.file = file
    self.method = method
    self.encoding = encoding
    self.f = open(self.file, self.method, encoding=self.encoding)  # 打开文件

def __enter__(self):
    print('执行__enter__')
    return self.f  # 返回打开的文件对象

def __exit__(self, exc_type, exc_val, exc_tb):
    self.f.close()  # 关闭文件对象
    print('执行__exit__')

with MyOpen(‘text.md’, ‘r’, ‘utf-8’) as f: # f的值就是__enter__的返回值
print(‘执行with中的代码’)
text = f.read()
print(text)
执行顺序图解

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值