装饰器的声明和使用
Python函数装饰器(Decorators)使用下列形式装饰一个函数:
初期及问题诞生
假如现在在一个公司,有A B C三个业务部门,还有S一个基础服务部门,目前呢,S部门提供了两个函数,供其他部门调用,函数如下
def f1():
print('f1 called')
def f2():
print('f2 called')
在初期,其他部门这样调用是没有问题的,随着公司业务的发展,现在S部门需要对函数调用假如权限验证,如果有权限的话,才能进行调用,否则调用失败。考虑一下,如果是我们,该怎么做呢?
方案集合
- 让调用方也就是ABC部门在调用的时候,先主动进行权限验证
- S部门在对外提供的函数中,首先进行权限认证,然后再进行真正的函数操作
问题
- 方案一,将本不该暴露给外层的权限认证,暴露在使用方面前,同时如果有多个部门呢,要每个部门每个人都要周知到,你还不缺定别人一定会这么做,不靠谱。。。
- 方案二,看似看行,可是当S部门对外提供更多的需要进行权限验证方法时,每个函数都要调用权限验证,同样也实在费劲,不利于代码的维护性和扩展性
那么,有没有一种方法能够遵循代码的开放闭合原则,来完美的解决此问题呢
代码胜于雄辩
林纳斯 托瓦兹
python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。
重案组37号探员了解到,如果该案二审判决结果生效,那么关于王宝强马蓉离婚析产官司将于基层法院启动。此前,根据王宝强要求分割的财产内容,包括9套房屋,其中包括美国洛杉矶的一处房产,独家公司股权、出资,一辆宝马x5轿车、一辆宾利车,爱马仕、LV、香奈儿、GUCCi、PRADA、迪奥、范思哲、芬迪、YIFFANY等品牌的珠宝、首饰、名表、包、服饰等,此外还有存款、股票、理财产品、保险、原创设计品牌等。