|
发表于 2017-8-12 22:59:16
|
显示全部楼层
类共享的那块代码缩进有问题
然后总结一下装饰器的关键:
首先是方法共享,即把一个方法作为其他方法的附加功能
装饰器的使用与平时的方法调用不同,它需要以@+方法名 同时放在被'装饰'的方法的前面 这种形式
这样一来当被'装饰'的方法运行时,装饰方法也会运行
总的来说,要使用方法装饰器,需要形如:
- #coding=utf-8
- def fun_c(fun):
- '''
- #装饰器的名字随意,这里是fun_c,它需要有一个参数,用于指待调用这个装饰器的方法
-
- :param fun:
- :return:
- '''
- def call():#这个方法名字也可以随意,当约定俗成为call,这个方法包含了装饰器方法的主体代码,同时参数方法混在里面
- print 'A'
- fun()#参数方法被夹在这里,我们都知道python代码是一行一行执行的,所以会先打印A,然后执行参数方法的代码,最后打印B
- print 'B'
- return call#必须把call方法返回,不然会提示None类型对象无法被调用,我想当被调用时,实际是这样执行的,fun_c(fun)(),所以当不是一个方法作为放回之的时候,就会产生
- @fun_c#装饰器要用的话就放在被装饰方法的前面
- def fun_a():
- print 'C'
- fun_a()#有了装饰器的方法被执行的时候实际上执行的是fun_c(fun_c)()
复制代码
然后是类共享器:
- #coding=utf-8
- class A:
- '''
- 类共享器的特性在旧式类也可以使用,现在使用的就是旧式类,装饰类需要在构造函数时将产生方法传入,同时被调用的方法必须名为
- __call__
- '''
- def __init__(self,fun):#这里传入了参数方法fun
- self.f=fun
- def __call__(self):#这个函数的名字不能随便起,不信你试试
- print 'A'
- self.f()#然后参数方法就可以在这里被调用并执行
- print 'B'
- @A
- def fun_a():
- print 'C'
- fun_a()
复制代码
装饰器的作用是,当你需要经常讲函数代码的执行'夹在'一些相同代码的时候,这些相同代码你就可以提取出来做成装饰器,这样你就不用重复写一样的代码,而且很方便~ |
评分
-
查看全部评分
|