如果我导入了一个包,请说“networkx”。
如何覆盖其中的一个方法,使其成为包内其他所有函数调用的方法?
示例:
import networkx as nx
def _draw_networkx_nodes(G, pos,
nodelist=None,
node_size=300,
node_color='r',
node_shape='o',
alpha=1.0,
cmap=None,
vmin=None,
vmax=None,
ax=None,
linewidths=None,
label=None,
**kwds):
print 'OK'
nx.draw_networkx_nodes = _draw_networkx_nodes
G = nx.Graph()
G.add_edge('A','B')
nx.draw(G)
我希望方法draw调用其他方法来调用我的覆盖函数
答案 0 :(得分:1)
这是如何在python中调用方法的问题。您正在修补draw_networkx_nodes
顶级模块中的networkx
,但它并非来自该顶层模块:networkx.draw
方法是从networkx.drawing.nx_pylab
导入的。这个draw
方法本地调用draw_networkx
本地(仍然在该文件中)调用draw_networkx_nodes
。这就是为什么修改networkx/__init__.py
中导入的别名不起作用的原因:它从不在内部调用。
所以在其他方面:如果你想修补一个库的方法,看看它来自哪个子模块并在那里修补它。
所以在这种情况下:
In [6]: nx.drawing.nx_pylab.draw_networkx_nodes = _draw_networkx_nodes
In [7]: nx.draw(G)
OK