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

Change functionality of Python package without modifying library code

根据 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。由于不可能在运行时在函数内添加代码行,因此您需要定义自己的函数来实现所需的更改,然后将内部网络 x _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) 并创建你的小 function/module,它本质上更安全但更难玩。