如何解决更改Python软件包的功能而无需修改库代码
根据this answer.,对networkx
包进行了微小的更改,使其表现出我想要的样子
即我只需要将此代码添加到打包代码中的文件之一即可。
# ADD THIS LINE - prevent things from flying off into infinity if not connected
displacement = displacement - pos / ( k * np.sqrt(nnodes))
有没有一种方法可以以编程方式执行此操作而不实际修改源代码?这是“猴子修补”的情况吗?如果可能的话,我该怎么办?
解决方法
查看链接的答案和spring_layout函数的代码,您要执行的操作就是更改函数_fruchterman_reingold
。由于无法在运行时在函数内添加代码行,因此需要定义自己的函数以实现所需的更改,然后将内部networkx _fruchterman_reingold
绑定到函数,这确实是一种猴子修补。该代码可能如下所示:
# Assume you already defined the modified function and name it my_reingold
import networkx as nx
nx.drawing.layout._fruchterman_reingold = my_reingold
也就是说,无需在运行时修补Networkx源代码或猴子修补程序,您只需从layout.py文件(即fruchterman_reingold_layout,_fruchterman_reingold,_sparse_fruchterman_reingold)复制所需的代码并创建您的小功能/模块,这本来就更安全,但也许乐趣可能会减少。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。