探究Python开发中的with语句的内部实现原理

在 Python 开发中,经常会用到 with 语句来进行文件的读写操作。使用 with 语句方便开发,可是 with 语句的内部实现原理是什么呢?

我们在操作数据库的时候经常会自定义一个类,用来封装 SQL 的内部实现,便于在多个地方调用。今天我们依旧使用封装的数据库类作为模板进行 with 语句的探讨。

请看如下代码:

class SQLHelper(object):
    def open(self):
        print('与数据库建立连接')

    def feach(self, sql):
        print('在数据库中执行相关查询操作')

    def close(self):
        print('与数据库断开连接')

上述定义的类,你应该很熟悉了。

接下来我们来创建对象来实现响应的方法。

obj_sql = SQLHelper()
obj_sql.open()
obj_sql.feach('select * from class')
obj_sql.close()

运行该模块,控制台会依次打印:


与数据库建立连接
在数据库中执行相关查询操作
与数据库断开连接

 

那么该如何实现 with 语句的内部原理呢?

我们可以查看 with 语句的内部实现代码,在 with 语句的内部代码中,最主要的是实现了__enter__和__exit__方法。

现在我们来为刚才定义的类添加上述两个方法,来模拟实现 with 语句的内部原理。

代码如下:

def __enter__(self):
    self.open()
    return self

def __exit__(self, exc_type, exc_val, exc_tb):
    self.close()

接下来,我们使用 with 语句的方式实现通过定义对象实现的效果。

#系统默认调用__enter__方法, sql 就是__enter__返回值
with SQLHelper() as sql: 
    # 当执行完毕之后,自动调用__exit__方法
    sql.feach('select * from class')

运行之后,控制台同样打印:

与数据库建立连接
在数据库中执行相关查询操作
与数据库断开连接

现在你应该明白 with 语句的实现原理了吧!

综上所述,with 语句就是把我们的定义的方法,添加到系统默认调用的方法中进行二次封装,来达到简化代码的效果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值