转载请注明出处
with 如何工作 ?
with 实际上是由内部的 __enter__
以及 __exit__
实现的。
紧跟着 with 后面的语句被执行后,对象的 __enter__()
就会被调用,这个方法的返回值,赋给 as 后面的变量
当 with 里面的代码块全部执行以后,就会调用对象的 __exit()__
的方法
class Test(object):
def __enter__(self):
print('这是with开始')
return 'as 后面的'
def __exit__(self, exc_type, exc_val, exc_tb):
print('这是with结束')
with Test() as f:
print(f)
async with
异步上下文管理器指的是在enter
和exit
方法处能够暂停执行的上下文管理器。
为了实现这样的功能,需要加入两个新的方法:__aenter__
和__aexit__
。这两个方法都要返回一个 awaitable类型的值。await
就相当于 yield from
class AsyncContextManager:
async def __aenter__(self):
# 这里就相当于返回
await log('entering context')
async def __aexit__(self, exc_type, exc, tb):
await log('exiting context')
网友评论