python装饰器原理-Python装饰器原理

装饰器(Decorator)是面向对象设计模式的一种,这种模式的核心思想是在不改变原来核心业务逻辑代码的情况下,对函数或类对象进行额外的修饰。python中的装饰器由python解释器直接支持,其定义形式如下:

@decorator

def core_service:

....

要理解上述代码的含义,我们从自定义函数装饰器的原理出发。以下是示例代码:

importos, sys

defdecor_wrapper(func):

defdecorator():

print('Get in decorator')

func()

returndecorator

defcore_service():

print('Get in core_service')

if__name__ == '__main__':

core_service = decor_wrapper(core_service)

core_service()

运行结果:

Get in decorator

Get in core_service

原理:以上代码是一个简单的函数装饰器示例。核心代码逻辑是core_service()函数,真正的装饰器函数是定义在decor_wrapper()函数内部的decorator()函数,这个函数实现了装饰功能并调用了核心业务功能。decor_wrapper()函数仅仅是一个包装函数,用来返回装饰器的引用。core_service最终引用的是decor_wrapper()函数返回的装饰器函数,最后调用core_service()函数其实执行的就是装饰器函数decorator()。

以上编写装饰器代码的步骤比较多,且模式是固定的,因此python提供了语言级别的封装。上述代码可以抽象成如下形式,结果同上:

importos, sys

defdecor_wrapper(func):

defdecorator():

print('Get in decorator')

func()

returndecorator

@decor_wrapperdefcore_service():

print('Get in core_service')

if__name__ == '__main__':

core_service()

@decor_wrapper

defcore_service():

print('Get in core_service')

python解释器会将这段代码解析成以下形式:

defcore_service():

print('Get in core_service')

core_service = decor_wrapper(core_service)

通过以上分析,我们已经清楚了装饰器原理。真实的装饰器还会带有各种参数,实现各种复杂的功能,这些都是建立在这个基本原理的基础之上。下面我们再通过一个类装饰器的示例代码来结束这个主题:

importos, sys

defdecor_wrapper(cls):

defdecorator():

print('Get in decorator')

returncls()

returndecorator

@decor_wrapperclassCore:

def__init__(self):

print('New Core object')

if__name__ == '__main__':

core = Core()

运行结果:

Get in decorator

New Core object

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值