Python自学成才之路 装饰器编程之初试装饰器

2020-08-20 20:00:57 浏览数 (1)

装饰器可以理解为是一个控制过程,这个控制过程需要函数作为参数。一个函数加了控制过程之后,这个函数执行前后控制过程都能够做一些处理。有点类似于java里面的aop。

为了方便理解,先用类来创建一个装饰器。

代码语言:javascript复制
class my_decorator(object):

    def __init__(self, f):
        print("进入到装饰器 __init__()")
        f()

    def __call__(self):
        print("进入装饰器 __call__()")

@my_decorator
def myFunction():
    print("进入函数")

myFunction()

输出:
进入到装饰器 __init__()
进入函数
进入装饰器 __call__()

一个类要想被用来做装饰器,必须是callable,可被调用的。而类想要做到可被调用就需要实现__call__方法。

怎么去理解这个装饰器执行过程,myfunction函数加了装饰器后,执行myFunction()等价于下面的代码:

代码语言:javascript复制
my_decorator = my_decorator(myFunction)
my_decorator()

也就是加了装饰器的函数在执行时,实际上是先用函数作为参数去初始化这个类得到类实例,然后再执行类实例。

上面的是一个简单的装饰器案例,如果想给函数传递参数或者给装饰器本身传递参数改怎么做呢?

0 人点赞