自定义nx.MultiDiGraph子类调用add_edge传weight参数报错如何解决
问题原因
- 你重写的
add_edge方法仅声明了接收任意数量的位置参数*args,没有对关键字参数做接收处理,调用时传入的weight=35属于关键字参数,无法被*args捕获,因此直接抛出参数不匹配的错误。 - NetworkX原生的
add_edge方法除了接收起点、终点两个位置参数外,还支持传入任意关键字参数作为边的属性,你的重写方法没有兼容这个设计。
修复方案
把重写的add_edge方法参数改为同时接收*args和**kwargs,调用父类方法时把两类参数都传入即可,修复后代码如下:
class ClassName(nx.MultiDiGraph): def __init__(self): super().__init__() self._dirty = True self._critical_path = None def add_edge(self, *args, **kwargs): """ add one edge """ self._dirty = True super().add_edge(*args, **kwargs)
补充说明
如果需要在调用add_edges_from等批量添加边的方法时也同步更新_dirty标记,建议用同样的参数定义方式重写对应方法,先更新_dirty标记再调用父类的对应实现即可。
内容的提问来源于stack exchange,提问作者krgira
相关产品推荐
相关产品推荐

