本博文源於ptthon基礎,主要探討如何手動實現一個建議打開文件操作的上下文管理器
上下文管理器概述
它本質上就是來更好的安全釋放資源有了它,我們更安全操作對象
上下文管理器協議規範
__enter__(self)
__exit__(self,type,value,tb)
前者是進入上下文調用,創建並返回一個可以引用的資源對象給with調用
後者是退出,主要用來釋放資源,可以理解爲清理災難現場。
python的災難現場無非是:需要關閉的文件,需要實現的各種異常處理
使用上下文的with格式:
with context as var:
pass
其中var就是從__enter__獲得
例子:手動實現打開文件操作的上下文管理器
進入時我們要打開文件,返回打開文件的對象,然後退出時,我們嘗試關閉文件
實驗準備
在項目裏創建一個test.txt,內容爲:
你好,python!
實現效果
實現代碼
class FileMgr(object):
def __init__(self, filename):
self.filename = filename
self.f = None # 表示打開狀態
def __enter__(self):
self.f = open(self.filename, encoding='utf-8')
return self.f
def __exit__(self, exc_type, exc_val, exc_tb):
if self.f:
self.f.close()
if __name__ == '__main__':
with FileMgr('test.txt') as f:
for line in f.readline():
print(line, end='')