首页 > 代码库 > python上下文管理
python上下文管理
class Context:
def __enter__(self):
print(‘enter context‘)
def __exit__(self, *args, **kwargs):
print(‘exit context‘)
#当一个对象同时实现了 `__enter__`和`__exit__`方法, 那么这个对象就是支持上下文管理的对象
with Context():
print(‘do somethings‘)
print(‘out of context‘)
进入with语句块之前,会执行__enter__方法, 退出with语句块之前,会还行__exit__方法
为什么叫上下文?
with开启一个语句块, 执行这个语句块之前,会执行 __enter__方法, 执行这个语句块之后,会执行__exit__ 方法,
也就是说在这个语句块的前后会执行一些操作
with Context():
raise Exception()
即使with块抛出异常,__enter__和__exit__还是会执行,所以上下文管理是安全的
class Context:
def __enter__(self):
print(‘enter context‘)
return self
def __exit__(self, *args, **kwargs):
print(‘exit context‘)
ctx = Context()
with ctx as c:
print(id(ctx))
print(id(c))
print(c)
`as`子句可以获取`__enter__`方法的返回值
class Context:
def __enter__(self):
print(‘enter context‘)
return ‘haha‘
def __exit__(self, *args, **kwargs):
print(‘exit context‘)
with Context() as s:
print(s)
`as`子句可以获取`__enter__`方法的返回值
`__enter__` 除self之外,不带任何参数
`__exit__`返回值获取不到,没有意意义
python上下文管理