定义装饰器

装饰器可以用在方法上, 也可以用在类上.

目前我们只研究方法装饰器

其实装饰器和 java 中的注解有点像, 但是比 java 的注解容易使用了很多.


如果我们要给函数foo使用装饰器的方式增强功能, 语法如下:

@strong
def hello():
    print("我是 hello 函数中的代码")

说明:

  1. 在需要添加的装饰函数上面一行使用@来添加装饰器

  2. @后面紧跟中装饰器名strong, 当然你可以定于任何的名字.

  3. strong是装饰器, 本质上是一个函数. 他接收函数hello作为参数, 并返回一函数来替换掉hello(当然也可以不替换).

  4. hello使用装饰器之后, 相当于hello函数使用下面的代码被替换掉了.hello = strong(hello)

  5. 在调用hello的时候, 其实是调用的strong()返回的那个函数.


def strong(fun):  # fun 将来就是被替换的 hello
    def new_hello():
        print("我是装饰器中的代码, 在 hello 之前执行的")
        fun()
        print("我是装饰器中的代码, 在 hello 之后...执行的")

    return new_hello


@strong
def hello():
    print("我是 hello 函数中的代码")


# 这里调用的其实是装饰器返回的函数.
hello()


装饰器是语法糖

严格来讲, 装饰器只是语法糖.

装饰器就是一函数, 其参数是被装饰的函数.

综上, 装饰器的一大特性就是把装饰的函数替换成其他函数, 第二大特性就是装饰函数在加载模块的时候就立即执行了.

Copyright © 李振超 2018 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-02-25 07:12:09

results matching ""

    No results matching ""