python简易装饰器_Python装饰器decorator的简易教程

?在Python加peewee让数据库访问更简单一文中有几个函数需要连接数据库,这样就导致了少量重复代码

2d67d03a6eee449e5459ec6cf2cbb779.png1.png

有过Java Spring开发经验的同学就要跳出来了,这样不简洁,Spring早即可以AOP了,根本不用操心数据库连接的问题。Python当然可以啊,而且是语言级别就已经支持了,这个功能叫decorator,中文都叫装饰器。有没有想起什么?对了,这就是设计模式里的decorator模式

我们创立一个新方法,在方法内再建个wrapper方法,尽管感觉很奇怪,但就是这么写的。当然这两个方法名可以随意起了,样式一致就可

9991f2a7b6f1ba7a4118a4545e145099.png2.png

func 就是要被修饰的方法,做为一个参数传入到db_connect方法里,我们即可以在func前面连接数据库就好。最后返回wrapper。这也是python比较特别的地方,方法是可以作为参数传来传去的。这比Java只能在类级别的反射上做文章吧,一个简单的功能也需要建个类

最后我们在每个需要连接数据库的函数名前加上@db_connect即可以了。每个函数都会自动连接数据库。又有同学说了,这有什么区别,行数没变啊。但这样你不觉得核心代码更简洁了吗?不需要操心数据库连接的问题了。同样你还可以在db_connect里加些日志或者者事务连接什么的,这样就是全局性的改变了,不用你每个函数都去修改一遍。

其实这就是Python元编程,也就是在你的代码上再编程去操作你的代码,尽管听着有点呦口,但是做到后很爽。 有兴趣的同学可以看下Python的官方文档。?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值