Python概念-上下文管理協議中的__enter__和__exit__


所謂上下文管理協議,就是咱們打開文件時常用的一種方法: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())

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM