作家
登录

Python开发中如何使用Hook技巧

作者: 来源: 2017-11-01 10:13:16 阅读 我要评论

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__办法,其就可以作为一个润饰器存在了,并且因为类的可操作性较办法更强大年夜,所以类做润饰器也可以实现更丰富的特点。

【编辑推荐】

  1. 外媒速递:Python编程进修傍边必须躲避的三种常见缺点
  2. 外媒速递:Python说话再登新岑岭
  3. 外媒速递:Python值得你加以进修的四个关键来由
  4. 外媒速递:三大年夜顶尖开源Python IDE筹划综述
  5. 外媒速递:你值得一试的三款开源Python GUI框架
【义务编辑:张燕妮 TEL:(010)68476606】

  推荐阅读

  别让程序员的职业步伐停止在35岁,如何让我们走得更远

2017年架构师最重要的48个小时 | 8折倒计时 因为互联网的蓬勃成长,科技技巧的赓续迭代更新,中国的互联网行业已经步入的世界的前列,因为,我们经常能看到,在各类各样的报道中,法度榜样>>>详细阅读


本文标题:Python开发中如何使用Hook技巧

地址:http://www.17bianji.com/lsqh/38335.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)