3)应用带参数的润饰符来润饰办法
def something(a,b): def new_func(func):def wrap(*args,**kargv): print a func(*args,**kargv) print breturn wrap return new_func@something(1,2)def func(a,b): pass
上述提到了润饰符的操作,那么我们在应用润饰符时有一些小技能须要懂得
其他Hook
python描述符是一个“绑定行动”的对象属性,在描述符协定中,它可以经由过程办法重写属性的拜访。这些办法有 __get__(), __set__(), 和__delete__()。如不雅这些办法中的任何一个被定义在一个对象中,这个对象就是一个描述符。
1、Hook内建办法
#Hookopen办法real_open = __builtins__.open__builtin__.open = my_open#Hookimport办法real_importer = __import____builtins__.__import__ = my_importer
上述操作使得my_open代替了python内置的open办法,故而我们可以应用我们本身的my_open办法来监控后续对open办法的调用了
实际上这是所有说话都邑应用到的Hook技能,往往在我们应用了第三方的包,欲望在之上做一些扩大,但又不想修改原有的代码时应用
多说一句
2、Monkey Patch
1、应用functools
防止应用润饰器后函数签名被改变
from functools import wrapsdef my_dec(func): @wraps(func) def wrapped():print %siscalled%func.__name__return func() return wrapped@my_decdef foo(): pass
如许处理后,foo办法的签名与被润饰之前保持了一致,不然签名将会变成my_dec办法的签名
from decorator import decorator@decoratordef wrap(f,*args,**kw): print start f(*args,**kw) print end#如许wrap办法就变成了一个decorator@wrapdef func(): print func
3、应用类做润饰器
class test(object): def__init__(self,func): self._func = func def__call__(self): print start self._func() print end@testdef func(): print funcfunc()startfuncend
实际应用中很少碰到可以应用一个类作为润饰器,但实际上只要一个类实现了__call__办法,其就可以作为一个润饰器存在了,并且因为类的可操作性较办法更强大年夜,所以类做润饰器也可以实现更丰富的特点。
【编辑推荐】
- 外媒速递:Python编程进修傍边必须躲避的三种常见缺点
- 外媒速递:Python说话再登新岑岭
- 外媒速递:Python值得你加以进修的四个关键来由
- 外媒速递:三大年夜顶尖开源Python IDE筹划综述
- 外媒速递:你值得一试的三款开源Python GUI框架
推荐阅读
2017年架构师最重要的48个小时 | 8折倒计时 因为互联网的蓬勃成长,科技技巧的赓续迭代更新,中国的互联网行业已经步入的世界的前列,因为,我们经常能看到,在各类各样的报道中,法度榜样>>>详细阅读
本文标题:Python开发中如何使用Hook技巧
地址:http://www.17bianji.com/lsqh/38335.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示