装饰器内部传参的使用
来源:互联网 发布:淘宝加盟开店 编辑:程序博客网 时间:2024/05/22 01:33
一般在应用装饰器时,装饰器名副其实,就是完全的装饰作用,没有任何实际功用。
但有时为了简化代码,想把一些相同的有功能的代码放在装饰器里,但是装饰器和内部函数间的切面将两者隔离开,因此需要在装饰器和内部函数上做一点小手脚,就可以达到目的:
import datetimeclass ca: def __init__(self): self.value='initial' self.stat='ok' def domethod(self): self.value='changed' self.stat='dump' print 'The value is %s'%self.value print 'The stat is %s'%self.stat return self def backhome(self): self.value='initial' print 'The value is back to %s'%self.value def setok(self): self.stat='ok' print 'The stat is %s'%self.statdef dec(func): def _dec(*a,**ka): InOfa=ca() targetargs=InOfa.domethod() res=func(targetargs,*a,**ka) res[0].setok() return res[1] return _dec@decdef thecorefunc(targetargs,date=datetime.date.today()): print date targetargs.backhome() return (targetargs,date)if __name__=='__main__': thecorefunc()
上面代码中的被装饰函数显而易见是thecorefunc,该函数在正常状况下的写法是不含有targetargs这个参数的,它就是需要在装饰器和函数间传递的变量(对象),在这个例子中,主体函数thecorefunc需要执行类ac的backhome方法,类ac的实例在运行时一定要先执行domethod方法,且结束时要执行setok方法,但又不想把这两个方法放在函数里,而是放在装饰器中,因此就将类ac的实例InOfa作为参数传入被装饰函数内,当被装饰函数运行后,再返回该实例,且和本身的返回值作为元祖一起返回。以待装饰器继续使用。
虽然打破了切面编程的这个切面,但也千万不要称其为黑魔法哦。
0 0
- 装饰器内部传参的使用
- python 9-2 如何为被装饰的函数保存元数据,使用标准库functools中的装饰器wraps 装饰内部包裹函数
- python 装饰器的使用
- python装饰器的使用
- python 装饰器的使用
- python装饰器的使用
- python装饰器的使用
- 装饰器的简单使用
- python内部装饰器@classmethod, @staticmethod, @property
- 23python装饰器的使用
- python 使用函数装饰器的例子
- SiteMesh页面装饰器的使用步骤
- SiteMesh页面装饰器的使用步骤
- SiteMesh页面装饰器的使用步骤
- Python中装饰器的使用
- python-函数装饰器的使用-25
- Python入门 装饰器的使用
- 关于sitemesh装饰器的使用方式
- Java随机生成6位数字
- gvim相关配置 及集成在source insight中
- bzoj 4472: [Jsoi2015]salesman 树形dp
- Action中使用的系统常量--
- mysql 函数和存储过程demo
- 装饰器内部传参的使用
- 关键字想要有一个好的排名细节工作很重要
- Beautifulsoup爬虫步骤
- linux初级学习之系统延迟及定时机制2-3
- 头条校招(今日头条2017秋招真题)
- Java虚拟机-锁与并发(十三)
- AndroidStudio中使用Git-初级篇(一)——从github上传和下载项目
- ip猛刷访问
- RS485转HART协议转换模块 MODBUS转HART转换器