python上下文管理协议_Python 让对象支持上下文管理协议

通过实现 __enter__() 和 __exit__() 方法可以使自定义的类支持 with 语句

例如:

class Open:

def __init__(self, filename, option):

self.filename = filename

self.option = option

self.fp = None

def read(self):

return self.fp.read()

def __enter__(self):

print('__enter__')

self.fp = open(self.filename, self.option)

return self

def __exit__(self, exc_type, exc_val, exc_tb):

print('__exit__')

self.fp.close()

with Open('text', 'r') as f:

print(f.read())

执行结果如下:

__enter__

python

javascript

django

mysql

__exit__

编写上下文管理器的主要原理是你的代码会放到 with 语句块中执行。 当出现 with 语句的时候,对象的 __enter__() 方法被触发, 它返回的值(如果有的话)会被赋值给 as 声明的变量。然后,with 语句块里面的代码开始执行。 最后,__exit__() 方法被触发进行清理工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值