首页 > 代码库 > 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上下文管理