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

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

作者: Jacob_LJ | 来源:发表于2018-05-24 21:18 被阅读63次

    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-装饰器)

          本文链接:https://www.haomeiwen.com/subject/vhxljftx.html