上下文管理器Context Manager實現原理

2021-09-02 15:41:01 字數 1370 閱讀 6397

python中用with關鍵字可以建立乙個上下文管理器,其為我們帶來了很多便利,比如常見的檔案的開啟關閉操作等,是否覺得它用起來很酷?想不想定義自己的上下文管理器?現在就讓我們一起來瞧瞧它的底層實現。

其實要定義自己的上下文管理器也很簡單,只需要實現兩個方法:

1、__enter__(self)

2、__exit__(self, exc_type, exc_value, traceback)

其中__enter__()方法會在建立時呼叫,可以把它返回的物件繫結到as指定的變數上,而__exit__()方法則會在退出上下文管理器時呼叫,它的三個引數描述了退出時發生的異常,沒有發生的話就為none。

實現思路就是這樣,下面舉一例,用以模擬檔案的操作過程(注:本人用的是python 3.5):

#建立過程:

class filesimulator:

def __init__(self, filepath, mode='r'):

self.filepath = filepath

self.mode = mode

def __enter__(self):

print('--------opened %s---------\n' %self.filepath)

return self

def __exit__(self, exc_type, exc_value, traceback):

print('\n--------%s closed-------' %self.filepath)

def read(self):

print('content content content...')

def write(self, strtowrite):

print('write-->%s' %strtowrite)

#呼叫過程:

with filesimulator(r'/home/python/test.py') as fd:

fd.read()

fd.write('just try it!')

#輸出結果:

--------opened /home/python/test.py---------

content content content...

write-->just try it!

--------/home/python/test.py closed-------

為了簡單一些,在此我沒有定義開啟模式,不過根據結果可看出,確實是先呼叫了__enter__()方法,最後退出時呼叫了__exit__()方法,可見我們的目的已經達到!

with上下文管理器

在執行 with 語句時,首先執行 with 後面的 open 執行完 後,會將 的結果通過 as 儲存到 f 中 然後在下面實現真正要執行的操作 在操作後面,並不需要寫檔案的關閉操作,檔案會在使用完後自動關閉 實際上,在檔案操作時,並不是不需要寫檔案的關閉,而是檔案的關閉操作在 with 的上下文...

with上下文管理器

上下文管理器 任何實現了enter 和exit 法的物件都可稱之為上下 管理 器,上下 管理器物件可以使 with 關鍵字。顯然,件 file 物件也實現 了上下 管理器 方法一class file def init self,filename,mode self.filename filename...

上下文管理器

今天我們聊聊上下文管理器,當然今天所談僅為個人觀點!今天如果不是學生面試回來跟我聊到了上下文管理器,我都忘了python中還有這麼個鬼了。特別寫一篇博文我們簡單聊聊。普通的檔案操作方式,例如 情況01 1 以寫的方式開啟檔案 f open 1.txt w 2 寫入檔案內容 f.write hello...