在不修改库代码的情况下更改Python包的功能

2024-05-23 17:18:51 发布

您现在位置:Python中文网/ 问答频道 /正文

networkx包做了一个小改动,使其按照this answer.的方式运行

也就是说,我只需要将此代码添加到包代码中的一个文件中

# ADD THIS LINE - prevent things from flying off into infinity if not connected
displacement = displacement - pos / ( k * np.sqrt(nnodes))

有没有一种方法可以在不修改源代码的情况下通过编程实现这一点?这会是“猴子修补术”吗?如果可能的话,我该怎么做


Tags: 文件代码answerfromnetworkxadd方式line
1条回答
网友
1楼 · 发布于 2024-05-23 17:18:51

查看链接的答案和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源代码或monkey patch,您可以从layout.py文件(即fruchterman_reingold_layout、_fruchterman_reingold、_sparse_fruchterman_reingold、_reingold)中复制所需的代码,然后创建您的小函数/模块,这本来就更安全,但可能没那么有趣

相关问题 更多 >