装饰器

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

 

  

            

 

posted @ 2018-08-03 15:47  通臂猿  阅读(122)  评论(0编辑  收藏  举报