Python源碼之with原理
阿新 • • 發佈:2018-09-13
close elf 調用 數據庫 param 最後一行 per etc pen
需求
我們平時對文件和數據庫操作的時候,執行的步驟都是打開---操作數據---關閉,這是正常的操作順序,但有時候難免會在操作完數據之後忘記關閉文件對象或數據庫,而使用with正是可以解決這個問題。
原理
class MysqlHelper(object): def open(self): print(‘open‘) pass def close(self): print(‘close‘) pass def fetch_all(self): pass def__enter__(self): """ 在執行with語句中代碼之前該函數首先被調用 :return: """ self.open() def __exit__(self, exc_type, exc_val, exc_tb): """ 當with語句中最後一行代碼執行完畢之後,自動調用該方法 :param exc_type: :param exc_val: :param exc_tb: :return:""" self.close() with MysqlHelper() as f: pass
對於要使用with語句的對象,在執行with代碼體之前會首先執行該對象的__enter__方法,然後再執行代碼體,最後自動執行__exit__方法。
Python源碼之with原理