Python基础28-面向对象(系统内置方法8-装饰器)

Python基础28-面向对象(系统内置方法8-装饰器)_第1张图片
Python基础-面向对象(方法)

8 装饰器

1 装饰器(函数式实现)

2 通过类方式,实现装饰器

  • 通常装饰器使用
def check(func):
    print("增加功能")
    def inner():
        print("登录验证操作....")
        func()
    return inner

@check
def fss():
    print("发说说")

fss()

>>>> 打印结果

增加功能
登录验证操作....
发说说
  • 使用@check 方式实际上就是使用fss = check(fss)
def check(func):
    print("增加功能")
    def inner():
        print("登录验证操作....")
        func()
    return inner

# @check
def fss():
    print("发说说")

fss = check(fss) # 使用@check 方式实际上就是使用`fss = check(fss)`

fss()

>>>> 打印结果

增加功能
登录验证操作....
发说说
  • 那么对于fss = check(fss),使用对象思想的理解就是:
    1. check 是一个类,check()方式是实例化 check 类;
    2. check类实例化时接收一个参数,参数就是是 fss 函数;
    3. fss 就是 check类的实例对象;
    4. fss() 就是调用实例方法,此时的 check 类必须实现了__call__方法;
      实现代码如下
class check:

    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        print("增加功能")
        print("登录验证操作....")
        self.func()

def fss():
    print("发说说")

fss = check(fss)

fss()

>>>> 打印结果

增加功能
登录验证操作....
发说说
  • 通过@check 方式,通过类,实现装饰器
class check:

    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        print("增加功能")
        print("登录验证操作....")
        self.func()


@check
def fss():
    print("发说说")

fss()

>>>> 打印结果

增加功能
登录验证操作....
发说说

问题:

  1. 回顾装饰器的概念及通过闭包及返回函数方式的实现
  2. 代码练习:通过类形式实现装饰器

你可能感兴趣的:(Python基础28-面向对象(系统内置方法8-装饰器))