首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在python包中对内部私有函数进行猴子修补?

如何在python包中对内部私有函数进行猴子修补?
EN

Stack Overflow用户
提问于 2014-01-06 20:42:52
回答 1查看 1.4K关注 0票数 2

在使用包pygal时,我必须更改pygal.util模块中的实用程序函数。此函数由其他模块中的其他函数调用。我该怎么修补这个功能?现在,我已经在dist_packages中编辑了代码,但是必须有一种方法来动态地分配这个函数?

该函数为pygal.util.is_major。我试着用以下方式来做:pygal.util.is_major = lambda x: False,但是它不起作用。我认为这是因为包中的其他模块将此函数导入到它们的本地命名空间中。因此,更改它没有任何效果,因为其他模块已经将该函数的旧版本导入到它们的本地命名空间中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-06 21:18:28

分配给is_major的原因是,在分配给它之前,其他两个pygal模块将is_major导入到它们的本地名称空间。

The pygal.graph.radar模块

代码语言:javascript
代码运行次数:0
运行
复制
from pygal.util import deg, cached_property, compute_scale, is_major

pygal.graph.graph模块

代码语言:javascript
代码运行次数:0
运行
复制
from pygal.util import (
    is_major, truncate, reverse_text_len, get_texts_box, cut, rad, decorate)

如果您可以在导入这些模块之前对is_major函数进行路径调整,那么它应该可以工作。如果你不能,你可以重新加载图形模块后,猴子补丁。

就像这样:

代码语言:javascript
代码运行次数:0
运行
复制
import pygal.util
import pygal.graph
import pygal.graph.radar

pygal.util.is_major = my_function
reload(pygal.graph)
reload(pygal.graph.radar)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20958895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档