一 了解装饰器前准备

python 基础 5.1 装饰器
 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 被重新定义了
python 基础 5.1 装饰器

类方法使用装饰器

 

python 基础 5.1 装饰器
#!/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()
python 基础 5.1 装饰器

 

 

 

 

二 装饰器解决需求

初创公司有N个业务部门,1个基础平台部门,基础平台负责提供底层的功能,如:数据库操作、redis调用、监控API等功能。业务部门使用基础功能时,只需调用基础平台提供的功能即可。如下:

python 基础 5.1 装饰器
 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()
python 基础 5.1 装饰器

增加 调用基础功能前需要验证 功能

目前公司有条不紊的进行着,但是,以前基础平台的开发人员在写代码时候没有关注验证相关的问题,即:基础平台的提供的功能可以被任何人使用。现在需要对基础平台的所有功能进行重构,为平台提供的所有功能添加验证机制,即:执行功能前,先进行验证。

1 最不能使用的方法

  每个业务部门自己写代码,调用基础平台的功能之前先验证。

2  费事的方法 不可取

  只对基础平台的代码进行重构,让N业务部门无需做任何修改

python 基础 5.1 装饰器
 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()
python 基础 5.1 装饰器

相关文章: