所謂上下文管理協議,就是咱們打開文件時常用的一種方法:with
__enter__(self):當with開始運行的時候觸發此方法的運行
__exit__(self, exc_type, exc_val, exc_tb):當with運行結束之后觸發此方法的運行
exc_type如果拋出異常,這里獲取異常的類型
exc_val如果拋出異常,這里顯示異常內容
exc_tb如果拋出異常,這里顯示所在位置
代碼示例:(以自己定義的Open類型做示例)
1 # 編輯者:閆龍 2 class Open: 3 def __init__(self,filename,mode,encoding): #在實例化Open的時候傳入文件名稱,打開方式,編碼格式 4 self.filename = filename 5 self.mode = mode 6 self.encoding = encoding 7 #使用系統函數open()傳入相應打開文件所需的參數,將文件句柄傳遞給self.file 8 self.file = open(filename,mode=mode,encoding=encoding)#這里我總感覺是在作弊 9 def read(self):#自己定義read方法 10 return self.file.read()#返回self.file文件句柄read()的值 11 def write(self,Context):#自己定義write方法 12 self.file.write(Context+"\n")#使用self.file文件句柄write方法將內容寫入文件 13 print(Context,"已寫入文件",self.filename) 14 # 利用__getattr__(),Attr系列中的getattr,當對象沒有找到Open中傳遞過來的名字時,調用此方法 15 def __getattr__(self, item): 16 return getattr(self.file,item)#返回self.file文件句柄中,被對象調用,切在Open類中沒有的名字 17 def __enter__(self): 18 return self 19 def __exit__(self, exc_type, exc_val, exc_tb): 20 self.file.close() 21 print("文件已經關閉") 22 23 # MyFile = Open("a.txt","w+","utf8") 24 # MyFile.write("Egon is SomeBody") 25 # MyFile.close() 26 # MyFile = Open("a.txt","r+","utf8") 27 # print(MyFile.read()) 28 # MyFile.seek(0) 29 # print(MyFile.readline()) 30 # MyFile.close() 31 32 with Open("a.txt","r+","utf8") as egon: 33 print(egon.read())