Python装饰器

Python装饰器本质上是一个Python 函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数/类对象。 它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。

python装饰器的4种类型:

1.函数装饰函数(最常用)

2.函数装饰类

3.类装饰函数

4.类装饰类

装饰器触发时刻:被装饰者被调但未调用时会立即触发装饰器 函数(类)

Python装饰器的写法核心和注意事项:

 装饰器中的装饰函数返回的一定是函数对象,而非函数调用

几种装饰器的写法Demo

1.函数装饰函数

def wrapF(originalFunction):
    def newFunction(*args, **kwargs):
        result = originalFunction(*args, **kwargs)
        return result
    return newFunction

@wrapF
def Bar(a):
    return a

# print(Bar('xiemanR'))

2.函数装饰类

def wrapClass(cls):
    def inner(*args,**kwargs):
        print('class name:', cls.__name__)
        return cls(*args,**kwargs)
    return inner

@wrapClass
class Foo():
    def __init__(self, a):
        self.a = a

    def fun(self):
        print('self.a =', self.a)


m = Foo('xiemanR')
m.fun()

3.类装饰函数

class ShowFunName():
    def __init__(self, func):
        self._func = func

    def __call__(self, *args,**kwargs):
        print('function name:', self._func.__name__)
        return self._func(*args,**kwargs)


@ShowFunName
def Bar(a):
    return a

print(Bar('xiemanR'))

3.类装饰类

class ShowClassName(object):
    def __init__(self, cls):
        self._cls = cls

    def __call__(self, *args,**kwargs):
        print('class name:', self._cls.__name__)
        return self._cls(*args,**kwargs)


@ShowClassName
class Foobar(object):
    def __init__(self, a):
        self.value = a

    def fun(self):
        print(self.value)

a = Foobar('xiemanR')
a.fun()

 我在重构web项目的时候,使用Python装饰器实现了一个服务层级事务控制器,可以出门右转看一下,帮助一下理解,地址:

Python装饰器-服务层级事务控制_咸鱼的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值