Python源码之with原理,,需求  我们平时对文


需求

  我们平时对文件和数据库操作的时候,执行的步骤都是打开---操作数据---关闭,这是正常的操作顺序,但有时候难免会在操作完数据之后忘记关闭文件对象或数据库,而使用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原理

评论关闭