zoukankan      html  css  js  c++  java
  • 装饰器

            在面向对象(OOP)的设计模式中,decorator被称为装饰模式。OOP的装饰模式需要通过继承和组合来实现,而Python除了能支持OOP的decorator外,直接从语法层次支持decorator。Python的decorator可以用函数实现,也可以用类实现。

    内置的装饰器

      内置的装饰器有三个,分别是staticmethod、classmethod和property,作用分别是把类中定义的实例方法变成静态方法、类方法和类属性。由于模块里可以定义函数,所以静态方法和类方法的用处并不是太多,除非你想要完全的面向对象编程。而属性也不是不可或缺的

    定义:

             装饰器的本质是闭包,在不改变函数调用和定义下,拓展函数的功能

    装饰器的形式: 函数是否有参数及返回值得四种情况

                   1 无参数,无返回值

     # # 装饰器函数
    # def w1(func):
    #     def inner():
    #         # 添加相应的功能,或者是属性,对象常量
            
    #         print("正在验证功能...")
    #         func()
    #     return inner
    #
    # """
    #  装饰器函数的参数执行被装饰的函数的引用  func-->f1
    #  被装饰的函数名重新指向装饰器函数返回的参数   f1-->inner
    # """
    # @w1   # f1=w1(f1)
    # def f1()  :# 被装饰函数
    #     print("天地玄黄")
    #
    # f1()
    # print(f1)        

              2 无参数,有返回值

    # 2  被装饰的函数有参数,无返回值
    # def w1(func):
    #     def inner(num):
    #         print('验证功能')
    #         func(num)
    #
    #     return inner
    # @w1
    # def f1(num):
    #     print('被装饰的函数————%d'% num)
    #
    # # f1=w1(f1)
    # f1(11)

                   3 有参数,无返回值

    # def w1(func):
    #     def inner():
    #         # 验证功能
    #         print('正在验证功能')
    #         ret= func()
    #         return  ret
    #     return  inner
    #
    # @w1 #f1=w1(f1)
    # def f1():
    #     print('被装饰的函数')
    #     return 'heheh'
    # ret=f1()
    #
    # print(ret)

                   4 有参数,有返回值

    # def w1(func):
    #     def inner(num):
    #         添加相应功能属性值
    #         print('验证功能--------')
    #         ret = func(num)
    #         return  ret
    #     return inner
    
    #
    # @w1
    # def f1(num):
    #     print('被装饰的函数;%d'% num)
    #     return '这就搞定了'
    #
    #
    # print(f1(1223))    

                 5 万能装饰器

    def w1(func):
            def inner(*args,**kwargs):
                # 验证功能
                print("正在验证功能...")
                ret=func(*args,**kwargs)
                return ret
            return inner
    
        @w1  # f1=w1(f1)
        def f1(*args,**kwargs):  # 被装饰函数
            print("被装饰的函数...")
            print(args)
            print(kwargs)
            return "hehe"

      

                

  • 相关阅读:
    20款时尚的 WordPress 博客主题【免费下载】
    垂涎欲滴!30个美味的食品类移动应用程序【上篇】
    Skippr – 轻量、快速的 jQuery 幻灯片插件
    Boba.js – 用于 Google 统计分析 JavaScript 库
    长期这么做的后果就是人民劳苦而得不到该有的回报,怎么能不垮
    左值与右值的根本区别在于能否获取内存地址,而能否赋值不是区分的依据
    百度后端C++电话一面
    Web 开发和数据科学家仍是 Python 开发的两大主力
    Consul架构
    去除两端逗号-JS
  • 原文地址:https://www.cnblogs.com/3-tong/p/9414524.html
Copyright © 2011-2022 走看看