- 上下文協議:在python中,實現了__enter__和__exit__這兩個方法的對象也就是實現了上下文協議(只有實現了上下文協議的對象纔可以使用with語句)。
- 上下文管理器:實現了上下文協議的對象又稱作上下文管理器。
- 用法:
(1)舉例:在操作數據庫時,首先連接數據庫,其次處理sql語句,最後釋放資源。那麼利用with語句可以將連接數據庫放在__enter__方法中,操作sql放在with語句代碼塊中,釋放資源放在__exit__方法中。
(2)代碼示例
class Test():
def __enter__(self):
print('進入enter方法')
def __exit__(self, exc_type, exc_val, exc_tb):
print('進入exit方法')
with Test() as obj:
print('進入業務方法')
進入enter方法
進入業務方法
進入exit方法
在這裏,可以簡單理解with語句的基本用法;但是with語句中as後面的obj並不是上下文管理器,而是__enter__方法中所返回的對象,如下:
class Test():
def __enter__(self):
a = 1
print('進入enter方法')
return a
def __exit__(self, exc_type, exc_val, exc_tb):
print('進入exit方法')
with Test() as obj:
print('進入業務方法')
print(obj)
進入enter方法
進入業務方法
1
進入exit方法
由此可見 as後面的obj對象其實就是__enter__方法中所返回的對象。