• 装饰器


            在面向对象(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"

      

                

  • 相关阅读:
    MySQL服务器SSD性能问题分析与测试
    MySQL 5.7基于GTID复制的常见问题和修复步骤(一)
    用pt-stalk定位MySQL短暂的性能问题
    服务器IO瓶颈对MySQL性能的影响
    MySQL主从检验一致性工具pt-table-checksum报错的案例分析
    MySQL DROP DB或TABLE场景下借助SQL Thread快速应用binlog恢复方案
    MySQL服务器发生OOM的案例分析
    NUMA导致的MySQL服务器SWAP问题分析与解决方案
    python学习之-- 生成唯一ID
    python练习之-计算器
  • 原文地址:https://www.cnblogs.com/3-tong/p/9414524.html
Copyright © 2020-2023  润新知