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
"""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值