一 了解装饰器前准备
1 #### 第一波 #### 2 def foo(): 3 print 'foo' 4 5 foo #表示是函数 6 foo() #表示执行foo函数 7 8 #### 第二波 #### 9 def foo(): 10 print 'foo' 11 12 foo = lambda x: x + 1 13 14 foo() # 执行下面的lambda表达式,而不再是原来的foo函数,因为函数 foo 被重新定义了
类方法使用装饰器
#!/usr/bin/env python
# _*_coding:utf-8_*_
class E:
@classmethod
def wraper(cls, f):
def outer(*args):
print(12312)
return f(*args)
return outer
class F:
def __init__(self):
pass
@classmethod
def wraper(cls, f):
def outer(*args):
print(12312)
return f()
return outer
@classmethod
@E.wraper
def f2(cls,):
print(234234)
def wraper(f):
def outer(*args):
print(12312)
return f()
return outer
# @wraper
@F.wraper
def f1():
print(32323)
# f1()
F.f2()
二 装饰器解决需求
初创公司有N个业务部门,1个基础平台部门,基础平台负责提供底层的功能,如:数据库操作、redis调用、监控API等功能。业务部门使用基础功能时,只需调用基础平台提供的功能即可。如下:
1 ############### 基础平台提供的功能如下 ############### 2 3 def f1(): 4 print 'f1' 5 6 def f2(): 7 print 'f2' 8 9 def f3(): 10 print 'f3' 11 12 def f4(): 13 print 'f4' 14 15 ############### 业务部门A 调用基础平台提供的功能 ############### 16 17 f1() 18 f2() 19 f3() 20 f4() 21 22 ############### 业务部门B 调用基础平台提供的功能 ############### 23 24 f1() 25 f2() 26 f3() 27 f4()
增加 调用基础功能前需要验证 功能
目前公司有条不紊的进行着,但是,以前基础平台的开发人员在写代码时候没有关注验证相关的问题,即:基础平台的提供的功能可以被任何人使用。现在需要对基础平台的所有功能进行重构,为平台提供的所有功能添加验证机制,即:执行功能前,先进行验证。
1 最不能使用的方法
每个业务部门自己写代码,调用基础平台的功能之前先验证。
2 费事的方法 不可取
只对基础平台的代码进行重构,让N业务部门无需做任何修改
1 ############### 基础平台提供的功能如下 ############### 2 3 def f1(): 4 # 验证1 5 # 验证2 6 # 验证3 7 print 'f1' 8 9 def f2(): 10 # 验证1 11 # 验证2 12 # 验证3 13 print 'f2' 14 15 def f3(): 16 # 验证1 17 # 验证2 18 # 验证3 19 print 'f3' 20 21 def f4(): 22 # 验证1 23 # 验证2 24 # 验证3 25 print 'f4' 26 27 ############### 业务部门不变 ############### 28 ### 业务部门A 调用基础平台提供的功能### 29 30 f1() 31 f2() 32 f3() 33 f4() 34 35 ### 业务部门B 调用基础平台提供的功能 ### 36 37 f1() 38 f2() 39 f3() 40 f4()