python--装饰器deorator--1

python–装饰器deorator
装饰器 :装饰器的作用就是为已经存在的函数或对象添加额外的功能
1、装饰器本质上是一个Python函数,
2、它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,
3、装饰器的返回值也是一个函数对象
4、使用 :用@
5、一般装饰器函数都被命名为wrapper()
“”"

"""
初级装饰器
"""


def debug(func):
    def wrapper(*args, **kwargs):  # 指定宇宙无敌参数
        print("[DEBUG]: enter {}()".format(func.__name__))
        print( 'Prepare and say...',)
        return func(*args, **kwargs)
    return wrapper  # 返回


@debug
def say(something):
    print( "hello {}!".format(something))

"""
高级
  1、基于类实现的装饰器
      1、对象重载了__call__()方法,那么这个对象就是callable
"""


class logging(object):
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        print(
        "[DEBUG]: enter function {func}()".format(
            func=self.func.__name__))
        return self.func(*args, **kwargs)


@logging
def say(something):
    print(
    "say {}!".format(something))

"""
高级 : 类+参数
     1、构造函数里接受的就不是一个函数,而是传入的参数。通过类把这些参数保存起来。然后在重载__call__方法是就需要接受一个函数并返回一个函数
"""


class logging(object):
    def __init__(self, level='INFO'):
        self.level = level

    def __call__(self, func):  # 接受函数
        def wrapper(*args, **kwargs):
            print(
            "[{level}]: enter function {func}()".format(
                level=self.level,
                func=func.__name__))
            func(*args, **kwargs)

        return wrapper  # 返回函数


@logging(level='INFO')
def say(something):
    print
    "say {}!".format(something)
"""
1、内置的装饰器
   1、内置的装饰器和普通的装饰器原理是一样的,只不过返回的不是函数,而是类对象
      1、@property
      2、@classmethod
"""

猜你喜欢

转载自blog.csdn.net/huangwencai123/article/details/91492572