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"

      

                

  • 相关阅读:
    [LeetCode]*124.Binary Tree Maximum Path Sum
    HDU3336-Count the string(KMP)
    各种配置环境变量总结
    数据结构与算法-为什么要使用算法
    request 对象
    Codeforces 15B Laser
    使用jq工具在Shell命令行处理JSON数据
    Android中的FrameLayout帧布局
    iOS 8 设置导航栏的背景颜色和背景图片
    Creating HTML table with vertically oriented text as table header 表头文字方向
  • 原文地址:https://www.cnblogs.com/3-tong/p/9414524.html
Copyright © 2011-2022 走看看