python运行时修改代码_python运行时修改代码的方法——monkey patch

monkey patch (猴子补丁)

用来在运行时动态修改已有的代码,而不需要修改原始代码。

简单的monkey patch 实现:

#coding=utf-8

def originalFunc():

print 'this is original function!'

def modifiedFunc():

modifiedFunc=1

print 'this is modified function!'

def main():

originalFunc()

if __name__=='__main__':

originalFunc=modifiedFunc

main()

python中所有的东西都是object,包括基本类型。查看一个object的所有属性的方法是:dir(obj)

函数在python中可以像使用变量一样对它进行赋值等操作。

查看属性的方法:

print locals()

print globals()

当我们import一个module时,python会做以下几件事情

•导入一个module

•将module对象加入到sys.modules,后续对该module的导入将直接从该dict中获得

•将module对象加入到globals dict中

当我们引用一个模块时,将会从globals中查找。这里如果要替换掉一个标准模块,我们得做以下两件事情

1.将我们自己的module加入到sys.modules中,替换掉原有的模块。如果被替换模块还没加载,那么我们得先对其进行加载,否则第一次加载时,还会加载标准模块。(这里有一个import hook可以用,不过这需要我们自己实现该hook,可能也可以使用该方法hook module import)

2.如果被替换模块引用了其他模块,那么我们也需要进行替换,但是这里我们可以修改globals dict,将我们的module加入到globals以hook这些被引用的模块。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值